【数据结构】(牛客)链表中倒数第k个结点,(LeetCode)合并两个有序链表,(牛客)CM11 链表分割
创始人
2024-05-06 04:10:36
0

目录

        一、链表中倒数第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;}
};


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

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

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...