每次翻转前两个节点,并且下一次翻转时,使用下一个节点作为头节点进行翻转。
下面是使用C语言实现的代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapTwo(struct ListNode* first, struct ListNode* second) {
first->next = second->next;
second->next = first;
return second;
}
struct ListNode* swapPairs(struct ListNode* head){
struct ListNode ret = {
.val = 0,
.next = head
}, *p = &ret, *q;
while (p && p->next && p->next->next) {
q = p->next->next;
p->next = swapTwo(p->next, q);
p = q->next;
}
return ret.next;
}