欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > C语言力扣刷题9——合并两个链表——[双指针]

C语言力扣刷题9——合并两个链表——[双指针]

2024/10/23 23:19:43 来源:https://blog.csdn.net/why1249777255/article/details/139998178  浏览:    关键词:C语言力扣刷题9——合并两个链表——[双指针]

力扣刷题9——合并两个链表——[双指针]

  • 一、博客声明
  • 二、题目描述
  • 三、解题思路
    • 1、思路说明
  • 四、解题代码(附注释)

一、博客声明

  找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬们的解题思路,开辟这个系列来记录。代码可能不是自己写的,不求方法最好,只求更多地理解大佬们的解题思路。


二、题目描述

给你两个链表 list1list2 ,它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 ab 的全部节点都删除,并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果:
在这里插入图片描述
请你返回结果链表的头指针。

示例 1
在这里插入图片描述
输入:list1 = [10,1,13,6,9,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]
输出:[10,1,13,1000000,1000001,1000002,5]
解释:我们删除 list1 中下标为 3 和 4 的两个节点,并将 list2 接在该位置。上图中蓝色的边和节点为答案链表。

示例 2
在这里插入图片描述

输入:list1 = [0,1,2,3,4,5,6], a = 2, b = 5, list2 = [1000000,1000001,1000002,1000003,1000004]
输出:[0,1,1000000,1000001,1000002,1000003,1000004,6]
解释:上图中蓝色的边和节点为答案链表。

提示:

3 <= list1.length <= 104
1 <= a <= b < list1.length - 1
1 <= list2.length <= 10^4


三、解题思路

1、思路说明

  这个题目采用双指针来做,通过快慢指针先遍历list1,让slow停在a的前一个节点,让fast停在b的后一个节点上面。然后就是让slow->next = list2,通过slow遍历到list2的尾部,然后slow->next = fast就可以结束这道题目。

在这里插入图片描述

 


四、解题代码(附注释)

struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2){struct ListNode* preHead = malloc(sizeof(struct ListNode));//定义一个检测头preHead->val = 0;preHead->next = list1;struct ListNode* slow = preHead->next; //定义慢指针struct ListNode* fast = preHead->next->next;    //定义快指针int number = 0; //定义一个变量,用来记录跑到哪个节点了while(number <= b){//只要快指针跑到第b个节点就可以停了if(number < a - 1){ //没到第a个节点的前一个节点,那么slow慢指针就一直移动slow = slow->next;}if(number < b){//没到第b个节点后一个节点,那么fast快指针就一直移动fast = fast->next;}number++;}slow->next = list2; //慢指针的下一个节点需要指向list2的头while(slow->next != NULL){//一直遍历到list2的尾节点slow = slow->next;}slow->next = fast; //尾节点接上faststruct ListNode* result = preHead->next;free(preHead);return result;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com