这道题实际上是上一道的一个特例嘛,每次都只交换相邻的两个,写起来更加简单了。
class Solution {
public:
ListNode *swapPairs(ListNode *head) {
if(!head||!head->next) return head;
ListNode *p1=head, *p2=head->next, *p3=p2 ->next, *p0=NULL;
ListNode *newHead = p2;
while(p2){
if(p0) p0->next = p2;
p2->next = p1;
p1->next = p3;
p0 = p1;
p1 = p3;
if(p1) p2 = p1->next;
else p2 = NULL;
if(p2) p3 = p2->next;
else p3 = NULL;
}
return newHead;
}
};