反轉鍊錶 LeetCode

2021-10-04 08:15:27 字數 659 閱讀 8648

遞迴版本稍微複雜一些,其關鍵在於反向工作。假設列表的其餘部分已經被反轉,現在我該如何反轉它前面的部分?

假設列表為:

n1→…→nk−1→nk→nk+1→…→nm→∅

若從節點 nk+1​ 到 nm​ 已經被反轉,而我們正處於 nk​。

n1→…→nk−1→nk→nk+1←…←nm

我們希望 nk+1 的下乙個節點指向 nk​。

所以,nk.next.next = nk。

要小心的是 n1的下乙個必須指向 ø 。如果你忽略了這一點,你的鍊錶中可能會產生迴圈。如果使用大小為 2 的鍊錶測試**,則可能會捕獲此錯誤。

listnode*

reverselist

(listnode* head)

return pre;

*///遞迴

if(head == null || head.next == null)

return head;

listnode p =

reverselist

(head.next)

; head.next.next = head;

//關鍵思想

head.next = null;

return p;

}

LeetCode 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?思路 雙指標,先用乙個指標算出鍊錶結點個數n,每次快指標從頭往先前移動n 步,慢指標往前移動1步進行交換即可。definition for sin...

LeetCode 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 思路分析 直接一趟掃瞄即可。方法二 遞迴 definition for singly linked list.struct listnode class solution listnode reversea...

LeetCode 反轉鍊錶

leetcode反轉鍊錶 利用雙指標 class solution return prev 利用遞迴 class solution 這裡的cur就是最後乙個節點 listnode cur reverselist head.next 這裡請配合動畫演示理解 如果鍊錶是 1 2 3 4 5,那麼此時的c...