↓快轉到主要內容
  1. LeetCode/

LeetCode 206: Reverse Linked List

·1 分鐘· ·
LeetCode Easy Linked-List Recursion
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-21

  • 提交紀錄:Runtime Error → Accepted → Wrong Answer → Accepted ×2

解題思路
#

一個一個把 cur.next 指回前一個節點(Linked List 模板二)。改指標之前要先把 cur.next 存起來,不然就找不到後面的節點了。最後 prev 是新的頭;空串列時 prev 是 None,也正確。

我的嘗試
#

第一版用了沒有定義的變數(NameError);重寫時一版沒處理空串列,[] 時取 head.next 報錯。

正確解法
#

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        prev, cur = None, head
        while cur:
            nxt = cur.next
            cur.next = prev
            prev, cur = cur, nxt
        return prev

複雜度
#

時間 O(n),空間 O(1)。

要特別避免的錯誤
#

  • 先存 cur.next 再改。
  • 空串列不要特判出錯:迴圈不會執行,直接回傳 None。

面試口說整理
#

我用 prev、cur 兩個指標,每一步先存下一個節點,再把 cur.next 指向 prev,兩個指標往前移。最後 prev 就是新的頭。時間 O(n)、空間 O(1)。

相關文章

LeetCode 203: Remove Linked List Elements
·1 分鐘
LeetCode Easy Linked-List Recursion
LeetCode 203 解題筆記:頭節點也可能要刪,用 dummy head 讓每次刪除都變成刪 cur.next;刪完不要前進
LeetCode 141: Linked List Cycle
·1 分鐘
LeetCode Easy Hash-Table Linked-List Two-Pointers Floyds-Cycle-Finding-Algorithm
LeetCode 141 解題筆記:Floyd 判圈,快指針一次兩步、慢指針一次一步,有環就一定會相遇;兩個都要從自己的位置往前走
LeetCode 160: Intersection of Two Linked Lists
·1 分鐘
LeetCode Easy Hash-Table Linked-List Two-Pointers
LeetCode 160 解題筆記:兩個指標走完自己的串列就換走對方的,都走 lenA + lenB 步,會同時到達交點或同時到 None
LeetCode 83: Remove Duplicates from Sorted List
·1 分鐘
LeetCode Easy Linked-List
LeetCode 83 解題筆記:已排序,重複的一定相鄰;cur 跟 cur.next 一樣就跳過 cur.next,不一樣才前進
LeetCode 2: Add Two Numbers
·1 分鐘
LeetCode Medium Linked-List Math Recursion
LeetCode 2 解題筆記:位數是反著存的,從頭開始逐位相加帶進位;迴圈跑到兩條都走完而且沒有進位為止
LeetCode 171: Excel Sheet Column Number
·1 分鐘
LeetCode Easy Math String
LeetCode 171 解題筆記:從左到右 res = res × 26 + 字母的值(A = 1)