交换后的链表如下:
然后cur指针后移,交换下两个节点,需要使得pre指向cur的前一个,因此使pre先指向cur
最后可以写出一次循环应该进行的处理:
pre.next = temp;
cur.next = temp.next;
temp.next = cur;
pre = cur;
cur = cur.next;
循环的次数:cur且cur.next为空
cur为空,说明整个链表都已经两两交换了
cur.next为空,说明后面只有一个节点了,一个节点就不需要交换了
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) return head;
ListNode dummy = new ListNode();
dummy.next = head;
ListNode pre = dummy;
ListNode cur = head;
ListNode temp = null;
while(cur != null && cur.next != null){
temp = cur.next;
pre.next = temp;
cur.next= temp.next;
temp.next = cur;
pre = cur;
cur = cur.next;
}
return dummy.next;
}