找到a结点的前一个结点pre,然后找到b结点的后一个结点suc,将pre连接到链表2的头部,将链表2的尾部连接到suc即可。
struct ListNode
{
int val;
ListNode *next;
ListNode():val(0),next(nullptr){}
ListNode(int x):val(x),next(nullptr){}
ListNode(int x,ListNode *next):val(x),next(next){}
};
class Solution {
public:
ListNode *mergeInBetween(ListNode *list1,int a,int b,ListNode *list2) {
ListNode *dummyNode = new ListNode(0,list1);
ListNode *p = dummyNode;
for(int i = 0;i<a;i++) {//寻找第a个节点的前一个结点
p = p->next;
}
ListNode *left = p;//left为第a个结点的前一个结点
//寻找第b个结点
for(int j = 0;j<=b-a;j++) {
p = p->next;
}
ListNode *right = p;//right为第b个结点
//寻找list2的尾结点
ListNode *cur = list2;
while(cur&&cur->next) {
cur = cur->next;
}
//连接
left->next = list2;
cur->next = right->next;
return dummyNode->next;
}
};