最开始创建 dummy 指向 head,prev = dummy。
从 prev 开始 (prev -> prev.next (cur) -> prev.next.next (next) -> prev.next.next.next (nextNext)) 三个一反转,
反转为 prev -> next -> cur -> nextNext,反转后 cur 成为新的 prev,继续三个一反转。
终止条件是 prev.next == null || prev.next.next == null。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if (head == null) {
return head;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prev = dummy;
while (prev.next != null && prev.next.next != null) {
ListNode cur = prev.next;
ListNode next = prev.next.next;
ListNode nextNext = prev.next.next.next;
prev.next = next;
next.next = cur;
cur.next = nextNext;
prev = cur;
}
return dummy.next;
}
}