iT邦幫忙

4

解LeetCode的學習筆記Day2_Add Two Numbers

LFI 2025-09-22 16:42:53103 瀏覽
  • 分享至 

  • xImage
  •  

今天是紀錄LeetCode解題的第二天

第二題題目:given two non-empty linked lists representing two non-negative integers.The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list
給定兩個非空值的鏈結串列,以倒敘排列,每個節點包含一位數字,將兩個數字相加,並以鏈結串列形式傳回

https://ithelp.ithome.com.tw/upload/images/20250922/201792346QgzjcSQio.png

這題學習到的新東西-鏈結串列(Linked List)
概念:由一個個**節點(Node)**串起來,每個節點至少包含儲存值(value)和指向下一個節點的參考,python裡是物件參考,通常命名為next

定義鏈結串列方式如下
https://ithelp.ithome.com.tw/upload/images/20250922/20179234LgRdVpXCOL.png

接著可以建立節點
https://ithelp.ithome.com.tw/upload/images/20250922/20179234gaoqBX3jYP.png

以上是簡單的鏈結串列定義和用法
接著我們看此題的解法
https://ithelp.ithome.com.tw/upload/images/20250922/201792345rZ6K7wXp0.png

以範例第一題l1 = [2,4,3], l2 = [5,6,4]
初始狀態

  • dummy → ListNode(0)
  • curr → 指向 dummy
  • carry = 0
  • p → 第一個節點(值 2),q → 第一個節點(值 5)

第一次執行(p.val=2,q.val=5)

  • x = 2, y = 5
  • s = x + y + carry = 2 + 5 + 0 = 7
  • carry = s//10 = 7//10=0 (7整除10商=0)
  • 新節點值 = s % 10 = 7 (7除以10餘7)
  • 移動: p → 4, q → 6

第二次執行(p.val=4,q.val=6)

  • x = 4, y = 6
  • s = x + y + carry = 4 + 6 + 0 = 10
  • carry = s//10 = 10//10=1 (10整除10商=1)
  • 新節點值 = s % 10 = 0 (10除以10餘0)
  • 移動: p → 3, q → 4

第三次執行(p.val=3,q.val=4)

  • x = 3, y = 4
  • s = x + y + carry = 3 + 4 + 1 = 8
  • carry = s//10 = 8//10=0 (8整除10商=8)
  • 新節點值 = s % 10 = 8 (8除以10餘8)
  • 移動: p → None, q → None

執行完三次,p、q都是None,carry=0,while條件不成立,迴圈結束
回傳dummy.next → 指向開頭的7
最後印出結果[7,0,8]


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言