leetcode 1669.合并两个链表
1669.合并两个链表(leetcode刷题——链表篇)
题目描述:
给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。
请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。
下图中蓝色边和节点展示了操作后的结果:
请你返回结果链表的头指针。
示例 1:

输入:list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]
输出:[0,1,2,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 <= 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-in-between-linked-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答题区
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2){
}
题解思路(C语言)
思路比较清晰,因为是链表不能直接获得下标,所以通过遍历的方法获得list1下标a所在节点和下标b所在节点,然后把list2插入list1中
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode node;
struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2){
node *t1, *t2, *t3; //我们需要找到三个节点,a,b和list2中的尾节点
int tm1 = a, tm2 = b; //声明两个变量记录a和b的下标
t1 = list1;
while(tm1--){ //遍历找到a下标节点
if(tm1 == 0){
t2 = t1->next;
while(tm2-- > a) { //遍历找到b节点
t2 = t2->next;
}
break; //这里加入break是要防止t1继续更新
}
t1 = t1->next;
}
t3 = list2;
while(t3->next){ //遍历到list2的尾节点
t3 = t3->next;
}
//链表拼接
t1->next = list2;
t3->next = t2->next;
return list1;
}
运行结果

更多推荐
请你返回结果链表的头指针。
所有评论(0)