版本1
执行结果:
解题思路:
语言:C++
class Solution {
public:
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
ListNode*p=list1;
ListNode*q=list1;
ListNode*m=list2;
ListNode*n=list2;
for(int i=0;i<b-a+2;i++){
q=q->next;
}
for(int j=0;j<a-1;j++){
p=p->next;
q=q->next;
}
while(n->next){
n=n->next;
}
p->next=m;
n->next=q;
return list1;
}
};
版本2
语言:C++
class Solution {
public:
ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {
ListNode*p=list1;
ListNode*q=list1;
ListNode*n=list2;
//将p指针移到a位置之前的位置
a--;
//将q指针移到b位置之后的位置
b++;
while(a--){
p=p->next;
}
while(b--){
q=q->next;
}
while(n->next){
n=n->next;
}
p->next=list2;
n->next=q;
return list1;
}
};
细节提升
1.两个for循环
可以直接以a、b的位置为参照,移动指针。