Day89 | 灵神 | 前后指针 合并两个链表

1669.合并两个链表

1669. 合并两个链表 - 力扣(LeetCode)

思路:

思路较为简单,就是一个模拟题

找到下标a的前一个结点并用p记录下来,继续遍历b-a+1的长度找到下标为b的节点,记录b的下一个节点为q

把list2接到p后,遍历list2,把末尾节点next指向q即可

完整代码:

cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
ListNode *t=new ListNode;
t->next=list1;
ListNode *p=t;
int length=b-a+1;
//找到下标为a的结点的前一节点
while(a--)
p=p->next;
ListNode *q=p->next;
//找到下标为b的后一结点
while(length--)
q=q->next;
p->next=list2;
//继续遍历list2
while(list2)
{
//遍历到末尾加上q
if(list2->next==nullptr)
{
list2->next=q;
break;
}
else
list2=list2->next;
}
return t->next;
}
};