【数据结构】(牛客)链表中倒数第k个结点,(LeetCode)合并两个有序链表,(牛客)CM11 链表分割

news/2025/1/14 20:22:53/

目录

        一、链表中倒数第k个结点

            1、题目说明

            2、题目解析

        二、合并两个有序链表

            1、题目说明

            2、题目解析

        三、CM11 链表分割

            1、题目说明

            2、题目解析


一、链表中倒数第k个结点

 1、题目说明

题目链接:链表中倒数第k个结点

输入一个链表,输出该链表中倒数第k个结点。

示例1:

输入:1,{1,2,3,4,5}

返回值:{5} 

 2、题目解析

思路:这道题同样使用快慢指针来解决问题,快指针fast先走k步,此时,fast和slow之间就相差了k,当fast走到NULL时,slow刚好到倒数第k个位置。

注意:当k大于链表的长度时,fast先走k步,fast直接就为空了,所以返回NULL。

 

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k) 
{struct ListNode* slow, * fast;slow = fast = pListHead;//fast先走k步while (k--){//链表可能没有k步长if (fast == NULL)return NULL;fast = fast->next;}while (fast){slow = slow->next;fast = fast->next;}return slow;
}

二、合并两个有序链表

 1、题目说明

题目链接:合并两个有序链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

 2、题目解析

思路:将两个链表的元素做对比,哪个较小哪个就下来尾插新链表,当 tail 为NULL 时,需要将list1 or list2赋值给它,再者需要注意当其中一个链表比较完了,另外一个有剩余的时候,需要将它剩余链表赋给tail。

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 
{if (list1 == NULL)return list2;if (list2 == NULL)return list1;struct ListNode* head, * tail;head = tail = NULL;//取小的尾插while (list1 && list2){if (list1->val < list2->val){if (tail == NULL){head = tail = list1;}else{tail->next = list1;tail = tail->next;}list1 = list1->next;}else{if (tail == NULL){head = tail = list2;}else{tail->next = list2;tail = tail->next;}list2 = list2->next;}}if (list1)tail->next = list1;if (list2)tail->next = list2;return head;
}

三、CM11 链表分割

 1、题目说明

题目链接:CM11 链表分割

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

 2、题目解析

思路:整体的逻辑就是再创建两个链表,其中一个存储原链表中比 x 小的节点元素。另外一个新的链表存储原链表中比 x 大的元素。但是题目中还有一个条件,就是保持原链表中节点之间的相对位置不变。因此,我们需要采用尾插的逻辑去处理。

注意:我们需要考虑一种情况,如果原先的链表最后一个节点小于x时,如下图,7链接的下一个节点为4,所以在大于x元素链表的最后,一定要进行置NULL。如果不置NULL,这个链表就是循环链表。

class Partition {
public:ListNode* partition(ListNode* pHead, int x) 
{struct ListNode* lessHead, * lessTail, * greaterHead, * greaterTail;lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));lessTail->next = greaterTail->next = NULL;struct ListNode* cur = pHead;while (cur){if (cur->val < x){lessTail->next = cur;lessTail = lessTail->next;}else{greaterTail->next = cur;greaterTail = greaterTail->next;}cur = cur->next;}lessTail->next = greaterHead->next;greaterTail->next = NULL;pHead = lessHead->next;free(lessHead);free(greaterHead);return pHead;}
};


本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。 

   老铁们,记着点赞加关注!!! 


http://www.ppmy.cn/news/9325.html

相关文章

vue入门(一)搭建vue项目,基础显示,指令

之前接触过vue&#xff0c;但是一直不是十分清晰&#xff0c;学的云里雾里&#xff0c;最近打算再次系统的整理一下&#xff0c;重新入门。还是根据vue官方文档一步一步的来&#xff0c;但是是属于简化的那种&#xff0c;会把我的学习过程都记录下来。 1.vue项目的搭建&#xf…

下载神器IDM安装与使用(保姆级教程)

下载神器IDM安装与使用&#xff08;保姆级教程&#xff09; 文章目录下载神器IDM安装与使用&#xff08;保姆级教程&#xff09;前言一、下载地址二、IDM是什么&#xff1f;三、作用与特点四、安装步骤总结前言 众所周知&#xff0c;下载工具是大家电脑里必装的软件之一。 但大…

34-剑指 Offer 35. 复杂链表的复制

题目 请实现 copyRandomList 函数&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个节点除了有一个 next 指针指向下一个节点&#xff0c;还有一个 random 指针指向链表中的任意节点或者 null。 示例 1&#xff1a; 输入&#xff1a;head [[7,null],[13,0],[11,…

带你深度剖析《数据在内存中的存储》——C语言

文章目录 一、数据类型介绍 二、整型在内存中的存储方式 2、1 原码、反码、补码的讲解 2、2 大小端介绍 2、2、1 大小端的概念 2、2、2 为什么要区分大小端存储呢&#xff1f; 2、2、3 大小端判断练习 三、浮点数在内存中的存储方式 3、1 浮点数在内存中的存储例题 3、2 浮点数…

WuThreat身份安全云-TVD每日漏洞情报-2023-01-04

漏洞名称:TP-Link root 权限执行任意代码 漏洞级别:高危 漏洞编号:CVE-2022-48194,CNNVD-202212-4130 相关涉及:TP-Link TL-WR902AC V3 0.9.1 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2022-26588 漏洞名称:YUI2 跨站点脚本 漏洞级别:低危 漏…

【C++】stack和queue

文章目录前言&#xff08;重点&#xff09;一、stack1、 stack的介绍2、queue的使用3、stack的模拟实现二、queue1、queue的介绍2、queue的使用3、queue的模拟实现三、容器适配器1、什么是容器适配器呢&#xff1f;2、STL标准库中stack和queue的底层结构四、deque1、deque的原理…

Kubeadm + Containerd 部署精简步骤

文章目录系统基础配置kubernetes 组件安装kubeadm 配置拷贝 kubectl 配置TS安装方式&#xff1a;kubeadm 版本&#xff1a;1.23.6 节点数量&#xff1a;2 &#xff08;1 个 Master Worker&#xff0c;1 个 Worker&#xff09; IP&#xff1a; node111&#xff1a;172.18.22.1…

ansible 第三天

1.挂载本地光盘到/mnt 2.配置yum源仓库文件通过多种方式实现 仓库1 &#xff1a; Name: RH294_Base Description&#xff1a; RH294 base software Base urt: file:///mnt/BaseOS 不需要验证钦件包 GPG 签名 启用此软件仓库 仓库 2: Name: RH294_Stream Description &#xff1…