Java的指針鞏固練習2.
背景: 交換一個鏈表中,連續的兩個節點的位置。比如:1->2->3->4
返回
2->1->4->3
.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public static ListNode swapPairs(ListNode head){
if(head == null || head.next == null)return head;
ListNode dummy = new ListNode(0);
ListNode l = head.next;
dummy.next = head;
while(dummy.next != null && dummy.next.next != null){
ListNode first = dummy.next;
ListNode second = dummy.next.next;
first.next = second.next;
second.next = first;
dummy.next = second;
dummy = dummy.next.next;
}
return l;
}
首先我們需要一個多餘的節點來存儲要交換的兩個節點的第一個節點上一級, 然後對着兩個節點進行交換, 再完成兩個節點的交換之後, 我們需要將之前存儲的第一個節點的上一級進行賦值,使其指向交換後的第一個節點,(這個過程很重要,如果缺失了這一過程,那麼我們將丟失鏈接)。 然後就這個多餘節點賦值爲交換之後的第二個節點,也就是爲下一次的交換做準備!