1. 程式人生 > >[leetcode] 24. 兩兩交換鏈表中的節點

[leetcode] 24. 兩兩交換鏈表中的節點

script vat middle com nod int 水題 ger pre

24. 兩兩交換鏈表中的節點

水題啊,不想說啥。分析題意,可發現兩個節點切換時,需要改動的除了兩個節點,還有兩個節點的前一個節點。代碼中middle與back,代表將要交換的兩個節點。

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode p = new ListNode(Integer.MAX_VALUE);
        ListNode ans = p;
        p.next = head;
        while (p != null) {
            ListNode front = p;
            ListNode middle = p.next;
            if (middle == null) break;
            ListNode back = p.next.next;
            if (back == null) break;
            swap(front, middle, back);
            p = p.next;
            p = p.next;
        }

        return ans.next;
    }

    private void swap(ListNode front, ListNode middle, ListNode back) {
        front.next = back;
        middle.next = back.next;
        back.next = middle;
    }
}

[leetcode] 24. 兩兩交換鏈表中的節點