有关链表的题目

news2025/2/26 4:40:42

目录

1.环形链表的约瑟夫问题

2.链表的中间节点

3.合并两个有序链表

4.反转链表

 5.移除链表元素


1.环形链表的约瑟夫问题

环形链表的约瑟夫问题_牛客题霸_牛客网 (nowcoder.com)

 

 思路:题目给出结构是环形链表,且题目已经定义好了环形链表的结构。

1.创建环形链表,对应数据为1~n。

2.定义一个变量i从1开始数,当i =m时就将该节点释放并重新连接链表。

3.直到单个节点成环时跳出循环,该节点的数据val即为幸存编号。 

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @param m int整型 
 * @return int整型
 */

#include <stdlib.h>
#include <stdio.h>
typedef struct ListNode ListNode;

ListNode* BuyNode(int n)
{
    ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
    newnode->val = n;
    newnode->next = NULL;
    return newnode;
}

ListNode* CreatList(int n)
{
   ListNode* phead = BuyNode(1);
   ListNode* ptail = phead;
   for(int i = 2; i <= n; i++)
   {
    ListNode* newnode = BuyNode(i);
    ptail->next = newnode;
    ptail = ptail->next;
   }
   ptail->next = phead;
   return ptail;
}

int ysf(int n, int m ) {
    // write code here
    ListNode* prev = CreatList(n);
    ListNode* pcur = prev->next;
    int i = 1;
    while(pcur->next != pcur)
    {

        if(i == m)
        {
            prev->next = pcur->next;
            free(pcur);
            pcur = prev->next;
            i = 1;
        }
        else
        {
            prev = pcur;
            pcur = pcur->next;
            i++;
        }
    }
    return pcur->val;
}

 需要注意的是当m=1是,最后一个人就是幸存者。

2.链表的中间节点

876. 链表的中间结点 - 力扣(LeetCode)

 思路:快慢指针法,快指针一次走一步,慢指针一次走两步。

当链表节点为奇数个时,循环结束标志是fast->next == NULL;

当链表节点为偶数个时,循环结束标志是fast == NULL;

要注意循环条件的前后顺序,&&会进行短路求值,如果写成(fast->next && fast),当链表节点为偶数个时,此时fast == NULL,很明显NULL->next是错误的。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode* fast = head;
    struct ListNode* slow = head;
    while(fast && fast->next)//注意这里短路,要注意顺序
    {
        fast = fast->next->next;
        slow = slow->next;
    }
    return slow;
}

3.合并两个有序链表

21. 合并两个有序链表 - 力扣(LeetCode)

 思路:创建一个新链表,给定两个指针遍历两条原链表,小的插入。当有剩余的链表时,直接将剩余的全部一起尾插到新链表中,无需一个一个尾插,因为原链表是有序的。

注意:会有一个原链表为空的情况,直接返回另一个原链表。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    if(list1 == NULL)
    {
        return list2;
    }
    if(list2 == NULL)
    {
        return list1;
    }
    ListNode* plist = NULL;
    ListNode* ptail = NULL;
    while(list1 && list2)
    {
        if(list1->val < list2->val)
        {
            if(plist == NULL)
            {
                    plist = ptail = list1;
                    list1 = list1->next;
            }
            else
            {
                ptail->next = list1;
                ptail = ptail->next;
                list1 = list1->next;
            }
        }
        else
        {
            if(plist == NULL)
            {
                plist = ptail = list2;
                list2 = list2->next;
            }
            else
            {
                ptail->next = list2;
                ptail = ptail->next;
                list2 = list2->next;
            }
        }
    }
    if(list1)
    {
        ptail->next = list1;
    }
    if(list2)
    {
        ptail->next = list2;
    }
    return plist;
}

4.反转链表

206. 反转链表 - 力扣(LeetCode)

 思路:创建新链表,一个一个头插,要注意连接顺序。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode; 
struct ListNode* reverseList(struct ListNode* head) {
    ListNode* plist = NULL;
    ListNode* pcur = head;
    while(pcur)
    {
        if(plist == NULL)
        {
            plist = head;
            pcur = pcur->next; 
            plist->next = NULL;
        }
        else
        {
            ListNode* temp = pcur->next;
            pcur->next = plist;
            plist = pcur;
            pcur = temp;
        }
    }
    return plist;
}

 5.移除链表元素

203. 移除链表元素 - 力扣(LeetCode)

 思路:创建一个新链表,newhead指向新链表的头节点,newtail指向当前链表的尾节点;

pcur遍历原链表,遇到val跳过,遇到非val链接到新链表。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* newhead = NULL;
    struct ListNode* newtail = NULL;
    struct ListNode* pcur = head;
    while(pcur)
    {
        if(pcur->val != val)
        {
            if(newhead == NULL)
            {
                newhead = newtail = pcur;
            }
            else
            {
                newtail->next = pcur;
                newtail = pcur;
            }
        }
        pcur = pcur->next;
    }
    if(newtail)
    {
        newtail->next = NULL;
    }
    return newhead;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1412543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无线充电 发射端(3)

终于可以传输功率了&#xff01;文末会附上这几个章节的全景图&#xff0c;归纳无线充电发射端状态切换。 这部分涉及到的报头 - 1/控制错误数据包&#xff1b;2/整流功率数据包&#xff1b;3/充电状态数据包&#xff1b;4/结束功率传输数据包&#xff1b;5/专有数据包&#…

Oracle触发器简单应用示例(销售与库存)

目录 一、应用描述 1、应用场景&#xff1a; 2、具体场景&#xff1a; 二、表结构介绍 1、表名介绍&#xff1a; 2、表结构&#xff1a; 三、设置触发器 四、运行示例 1、初始库存描述 2、有库存情况 2.1 1001号产品售出1件 2.2 1001号产品库存已减1 3、无库存情况…

Contest3388 - 2024寒假集训-排位赛竞 赛(二)-补题(A-M)

问题 A: 三五倍数(问题 A: 三五倍数 - BUCTOJ) 思路&#xff1a;这题就暴力&#xff0c;注意一下是小于1000&#xff0c;别取到1000就行。 #include<bits/stdc.h> using namespace std; int main() {int sum0;for(int i3;i<1000;i){if(i%30||i%50) sumi;}cout<<…

线性代数基础【6】二次型

第一节、二次型的基本概念及其标准型 一、基本概念 ①二次型 含n个变量x1,x2,…,xn,且每项都是2次的齐次多项式 ②标准二次型 只含有平方项不含交叉项的二次型称为标准二次型 ③二次型的标准化 设f(X)X^TAX 为一个二次型,经过可逆的线性变换XPY(即P为可逆矩阵)把二次型…

android camera系列(Camera1、Camera2、CameraX)的使用以及输出的图像格式

一、Camera 1.1、结合SurfaceView实现预览 1.1.1、布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-au…

网络防御保护-- 防火墙NAT实验

一、实验拓扑 本实验是在防火墙接口配置实验上&#xff0c;增加几台设备。其防火墙接口配置实验的设备配置已略&#xff0c;详细请看防火墙接口配置实验。 二、实验要求 1、生产区在工作时间&#xff08;9&#xff1a;00---18&#xff1a;00&#xff09;内可以访问服务区&…

Hadoop3.x源码解析

文章目录 一、RPC通信原理解析1、概要2、代码demo 二、NameNode启动源码解析1、概述2、启动9870端口服务3、加载镜像文件和编辑日志4、初始化NN的RPC服务端5、NN启动资源检查6、NN对心跳超时判断7、安全模式 三、DataNode启动源码解析1、概述2、初始化DataXceiverServer3、初始…

day3C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std;clas…

Oracle篇—分区表和分区索引的介绍和分类(第一篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

前端canvas项目实战——简历制作网站(二)——右侧属性栏(颜色)

目录 前言一、效果展示二、实现步骤1. 实现一个自定义的选色板2. 创建属性工厂&#xff0c;为每个对象定制属性3. 为canvas对象注册监听器&#xff0c;点击不同对象时更新属性列表 三、Show u the code后记 前言 上一篇博文中&#xff0c;我们实现了左侧工具栏&#xff0c;通过…

数字安全网:深入解析服务容错的三大绝招“

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数字安全网&#xff1a;深入解析服务容错的三大绝招" 前言什么是服务雪崩降级&#xff1a;优雅的后退熔断&#xff1a;保卫系统的守护者流量整形&#xff1a;平衡与优化 前言 想象一下&#xff…

【java】常见的面试问题

目录 一、异常 1、 throw 和 throws 的区别&#xff1f; 2、 final、finally、finalize 有什么区别&#xff1f; 3、try-catch-finally 中哪个部分可以省略&#xff1f; 4、try-catch-finally 中&#xff0c;如果 catch 中 return 了&#xff0c;finally 还会执行吗&#…

Tosei 自助网络店铺管理系统network_test.php_RCE漏洞复现

简介 Tosei 自助洗衣机是日本一家公司的产品,在 network_test.php 文件存在命令执行 漏洞复现 FOFA语法: body="tosei_login_check.php" 主要是日本 访问界面如下所示: 验证POC: /cgi-bin/network_test.php 拼接访问url: https://ip:port/cgi-bin/network_tes…

(四)ros中ros::init(argc,argv,”节点名称”)。中的节点名称和launch文件中的节点名称关系。

1、使用rosrun 命令执行ros程序: Rosrun <功能包名称> <节点名称>。其中”节点名称”为ros::init中的ros节点名称。 2、使用launch 文件 name 参数为ros节点名称。 如果采样launch启动ros程序&#xff0c;launch文件中的ros节点名称会替换ros::init中的节点名称…

深入理解sysbench工具

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、重要参数说明 四、实例4.1、CPU性能测试4.2、内存性能测试4.3、IO性能测试4.4、POSIX线程性能测试4.5、多线程调度测试 团队博客: 汽车电子社区 一、概述 sy…

华为路由器IPv6基础配置

1. R2的两个接口均采用静态IPv6地址配置方法 2. R1的GigabitEthernet0/0/3接口采用无状态 地址配置 3. R3的GigabitEthernet0/0/3接口采用DHCPv6 的方式配置IPv6地址 R1配置 ipv6 #全局使能IPv6 interface GigabitEthernet0/0/0ipv6 enable ipv6 address auto link-local #为…

学习JavaEE的日子 Day17 面向对象版学生管理系统

Day17 面向对象版学生管理系统 代码已放在资源里&#xff0c;有需要可自取&#xff01;&#xff01;&#xff01; 1.需求分析 管理的是一个一个的学生对象 学生类&#xff1a; public class Student{String name&#xff1b;char sex;int age;String classId;//班级号String …

1.26 day3 C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std; cla…

大文件传输之以太网UDP传输延迟解决方案

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业最宝贵的资产之一。随着企业规模的扩大和业务的全球化&#xff0c;大文件传输的需求日益增长&#xff0c;它不仅关系到企业内部数据的高效管理&#xff0c;也是与外部合作伙伴进行有效沟通的关键。然而&#xff0c;大文件…

aardio - 调用C编写的dll时的不同参数类型处理方法

import console; //生成 DLL import tcc; var c tcc(); c.code /** #include <stdio.h> #include <stdlib.h> #include <stdbool.h>#ifdef __cplusplus #define EXTERN_C extern "C" __declspec(dllexport) #else #define EXTERN_C __declsp…