24. Swap Nodes in Pairs

24. Swap Nodes in Pairs

題目

給出一個鏈表,交換每兩個相鄰的結點,並返回它的頭結點。
比如:
給出 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; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode fakeHead = new ListNode(0);
        fakeHead.next = head;
        ListNode pre = fakeHead;
        ListNode left = head;
        ListNode right = head.next;
        while(right.next != null && right.next.next != null){
            left.next = right.next;
            right.next = left;
            pre.next = right;
            left = left.next;
            right = right.next.next.next;
            pre = pre.next.next;
        }
        left.next = right.next;
        right.next = left;
        pre.next = right;
        return fakeHead.next;
    }
}

代碼分析

本題剛開始沒有思路,debug一遍後才慢慢理清思緒。
本題的重點是要分析循環結束的條件。
1.首先設置三個結點;
還要注意邊界條件。以及設定啞變量(頭結點位置會改變)。
2.然後滿足條件的進行循環;(包含圖中步驟1-6)
在循環中,先交換位置,然後將三個結點進行移位。
3.最後,做收尾處理。(包含圖中步驟7-9)
做鏈表的題目時一定注意,要畫一下位置,不然容易混亂。

步驟1,2,3是交換結點,4,5,6是將三個結點進行移位,7,8,9是做收尾處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章