給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換後的鏈表。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例:
給定 1->2->3->4, 你應該返回 2->1->4->3.
class Solution {
public ListNode swapPairs(ListNode head) {
//1 2 3 4
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
//當只有一個結點或者空的時候不反轉
while(pre.next != null && pre.next.next !=null){
ListNode node1 = pre.next;// 1
ListNode node2 = pre.next.next;//2
ListNode node = node2.next;//3
node2.next = node1;//2-1
node1.next = node; //1-3 pre 2-1-3-4
pre.next = node2; //pre-2 pre-2-1-3-4
//開始下一輪的反轉, pre要變成1,,處理1-3-4
pre = node1;
}
return dummy.next;
}
}