Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
public class SwapNodesinPairs {
public ListNode swapPairs(ListNode head) {
if(head==null) return null;
ListNode dummyNode = new ListNode(-1);
//指向交換過節點對的前一個節點
ListNode pre = dummyNode;
dummyNode.next = head;
//指向要交換節點對的第一個節點
ListNode cur = head;
//節點數可能是奇數或者偶數 作爲判斷終止條件
//每次以pre cur 和 cur.next作爲一組,進行不斷的節點對交換
while(cur!=null && cur.next!=null) {
ListNode next = cur.next;
cur.next = next.next;
next.next = cur;
pre.next = next;
cur = cur.next;
pre = pre.next.next;
}
return dummyNode.next;
}
public ListNode swapPairs2(ListNode head) {
if(head==null || head.next==null) return head;
ListNode node = head.next;
head.next = swapPairs(head.next.next);
node.next = head;
return node;
}
}