鏈表:反轉鏈表通用公式Java版

鏈表的反轉問題,包含很多種類型,有整體反轉,兩兩交換、區間反轉(m-n)、按照K個反轉等,這些反轉問題的共性都是我們要找到實際反轉的區間,區間又分爲兩種情況:

1、包含兩端節點,比如兩兩交換,此時區間爲 【head,tail】閉區間。

2、不包含最大邊界,比如反轉鏈表,此時區間爲【head,null)左閉右開。

模板代碼:

1、區間反轉-閉區間

 

public ListNode rev(ListNode head, ListNode tail) {
    if (head == null || head == tail) {
        return head;
    }
    ListNode cur = rev(head.next, tail);
    head.next.next = head;
    head.next = null;
    return cur;
}

2、區間反轉-左閉又開

public ListNode rev(ListNode head, ListNode tail) {
    if (head == null || head.next == tail) {
        return head;
    }
    ListNode cur = rev(head.next, tail);
    head.next.next = head;
    head.next = null;
    return cur;
}

實際應用

1、反轉鏈表--直接調用模板二即可

2、兩兩交換--可以先遍歷鏈表找到每次開始和結束的節點調用模板一(也可以使用一次遞歸完成)

3、按照K個數進行反轉,可以先遍歷找到前K個節點,調用模板二完成反轉

4、從M-N可以先找到M和N節點調用模板一,然後在和M之前與N之後連接形成新的鏈表

鏈表注意事項

1、一定檢查null,防止空指針,

2、一定要防止環形出現,節點被多次使用,一定要備份

3、斷開不必要指針

 

 

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