1. 程式人生 > >【LeetCode】24.兩兩交換連結串列中的節點

【LeetCode】24.兩兩交換連結串列中的節點

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。

示例:

給定 1->2->3->4, 你應該返回  2->1->4->3

思路:因為都是先交換兩個節點,在合併。即可以轉化為子問題求解。

class Solution {
    public ListNode swapPairs(ListNode head) {
        //如果此連結串列沒有節點或者只有一個節點,直接返回
        if(head == null || head.next == null){
            return head;
        }
        ListNode first = head;
        //此節點為要交換的節點
        ListNode swapNext = head.next;
        //定義一個節點來記住要交換的下一個節點
        ListNode firstNextNext = swapNext.next;
        //將交換節點的next置為它的前一個節點
        swapNext.next = first;
        //使用遞迴來實現交換,並將交換後的頭結點返回
        ListNode swapNextNext = swapPairs(firstNextNext);
        //將first節點的next置為返回的連結串列節點
        first.next = swapNextNext;
        //返回此連結串列交換後的頭結點
        return swapNext;
    }
}