142. Linked List Cycle II

題目
思路:最直覺的作法就是從頭開始沿著 next 一直走,然後用一個 set 來存放走過的 node,如果再次走到已走過的 node 就是 cycle 起點

Reverse Linked List

題目
思路

  1. 因為是 linked list,我們可以使用 curr 當指標,沿著 linked list 的頭往後走,一邊改變 curr.next 的指向,而過程中必須對前一個和下一個都有所掌握,因為 curr 必須指向前一個,然後它本身必須換到下一個
  2. 所以我們會有三個變數:previous, curr, next
  3. currhead 時,previous 會是 None,這兩個可以先設定好。目標是一直改變 curr 的指向,讓 curr 一直走到 linked list 盡頭,變成 None 為止,所以 while 條件就是 當有 curr 的時候就做

Merge Two Sorted Lists

題目
思路:

  1. 因為要做一個 linked list,可以用 while 在每次迴圈都接一個 node 出來

  2. 先設 while True:,等寫迴圈內容時再來確定 while 可繼續執行的條件

  3. 寫第一 part (如下) 後發現,while 條件需要 l1 and l2

    1
    2
    3
    4
    5
    6
    if l1.val > l2.val:
    curr.next = l2
    l2 = l2.next
    else:
    curr.next = l1
    l1 = l1.next

Remove Duplicates from Sorted List

題目
思路:

  1. 既然是 Linked List,我們可以宣告一個指標 curr 指向第一個 node,用 while 迴圈一次檢查一個 node (檢查完將指標移到下一個 node)

    • 不能直接用 head 來移動,因為到時候回傳答案的時候需要回傳這個 head
  2. 設定 while 可以繼續檢查的條件:有時要先寫 while 的內容,才會比較確定 while 條件應該怎麼寫,這時可以先寫 while True:,等內容寫完再來改條件

Add Two Numbers

題目
思路:

  1. 既然 Linked List 是由個位數開始,剛好可以用小學學的加法來從個位數開始相加。所以須設計一個迴圈來執行可重複執行的加法動作,一步步構建答案所需的 linked list,一次建立一個 node,直到完成。
  2. 迴圈要可重複執行,需要有個指標,在迴圈內對該指標所指的 node 做操作,並在迴圈結束時讓指標指到下一個 node,讓下一次迴圈來操作
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×