iT邦幫忙

0

C# leetcode Add Two Numbers

Ks 2021-05-12 16:07:421468 瀏覽

https://ithelp.ithome.com.tw/upload/images/20210512/201099900EtDyEGu3j.jpg

https://leetcode.com/problems/add-two-numbers/

請問Leetcode第二題,
我看了解答,
ListNode dummyNode = new ListNode(0);
ListNode prev = dummyNode;

dummyNode 這裡初始了一個ListNode的值
然後prev = 這個dummyNode
想請問為什麼最後輸出dummyNode.next會是答案?

裡面的結果是如何跟dummyNode這個變數連接上的?

謝謝

你可以google Linked List 有蠻多解答的
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2021-05-13 09:37:30
最佳解答

由於 prev 會「一直移動」
所以要用 dummyNode 「記得原始的位置」
如下圖所示

一開始執行

https://ithelp.ithome.com.tw/upload/images/20210513/20001787PXoBUV3LfW.png

迴圈第一次

https://ithelp.ithome.com.tw/upload/images/20210513/20001787StCahoap7E.png

迴圈第二次

https://ithelp.ithome.com.tw/upload/images/20210513/20001787U9QVhlPnQ0.png

迴圈第三次

https://ithelp.ithome.com.tw/upload/images/20210513/20001787qhEiXWTyu1.png

如果以上的圖你都看懂了的話
就明白為什麼答案是 dummyNode.next 了

Ks iT邦新手 3 級 ‧ 2021-05-13 17:02:34 檢舉

感謝大神, 剛才有用Debug模式逐行觀察了,看來要好好惡補一下/images/emoticon/emoticon02.gif

1
米歐
iT邦新手 3 級 ‧ 2021-05-12 17:37:12

簡單說

  1. 最一開始的 prev 跟 dummyNode 指向同一個 ListNode

  2. 隨著 while 迴圈的內容,prev 一直瘋狂長,也就是 prev = prev.next

  3. dummyNode 並沒有跟著 prev 移動,所以 dummyNode.Next 為迴圈的第一個結果,也就是迴圈內容的根節點

Ks iT邦新手 3 級 ‧ 2021-05-12 17:59:12 檢舉

是的, 我目前只能這樣抽象去理解它, 哈哈
但是不知道程式上是怎樣讓prev 和dummyNode怎麼匹配到那個值的

然後我寫個簡單的程式x和y, 請問跟上面的代碼有什麼差別

https://ithelp.ithome.com.tw/upload/images/20210512/20109990Q4WTns2XkX.jpg

米歐 iT邦新手 3 級 ‧ 2021-05-13 10:17:29 檢舉

你應該先了解哪些型別在 C# 中是傳值哪些是傳址,並了解其差異後,再過來看你的例子,你就會比較清楚知道,你的範例跟你的問題是不相關的內容,我會建議你先打好基礎後,再去刷 leetcode
/images/emoticon/emoticon39.gif

Ks iT邦新手 3 級 ‧ 2021-05-13 17:01:05 檢舉

哈哈哈 好的, 我第一次遇到這問題, 以前沒了解到/images/emoticon/emoticon06.gif

我要發表回答

立即登入回答