兩兩交換鏈表中的節點

思路

採用遞歸的方式進行求解。

先找遞歸終止的條件:沒有交換的時候就遞歸終止,即當鏈表只剩一個節點或者沒有節點的時候。

找返回值:因爲是兩兩交換,所以遞歸的每一層返回的都是已經交換完成的鏈表。

每層遞歸要做的事情:每一層可以保存兩個節點headnext(head.next),我們要做的事就是交換它兩的位置:next.next = head,那麼爲了讓每一次遞歸返回的鏈表連接起來,那麼還需要做的是:head.next = 上一次遞歸返回的結果。

具體執行過程如下

代碼

package leetcode.problem24;

import leetcode.ListNode;

class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null){
            return head;
        }
        ListNode next = head.next;
        head.next = swapPairs(next.next);
        next.next = head;
        return next;
    }
}

 

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