給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
1.這道題似乎沒有什麼優化的演算法,就是一些細節需要注意
2.其實思路大家都是有的,就是每次取一節點進行相加,設定乙個進製標誌位,依次相加即可。但是在細節上還需要把握一下
3.第乙個就是當兩個鍊錶長度不同時,例如l1鍊錶已經遍歷完了,但是l2鍊錶還沒有遍歷完,那麼就需要將l2的後面繼續放到新的鍊錶中,其中還是需要注意是否最高位是否還有進製
4.第二個就是當鍊表長度相同時,哪怕已經加完了,最後還是要判斷一下最高位是否有進製,否則會導致輸出錯誤
3.對於進製的標誌設定,我就走了不少彎路,我設定的是乙個布林值來判斷是否有進製,看了答案之後我發現進製標誌直接設定0或者1就行,就可以直接相加,無需判斷。
4.對於兩個鍊錶不同長的問題,我也走了彎路,我的思想是走完了乙個鍊錶之後,把沒走完的鍊錶後面直接放進去,考慮進製就可以了,但是實際上可以不用這麼做。我們完全可以直接遍歷最長的鍊錶為標準,當短鍊錶為空的時候,我們就把加的值設定為0就可以了
5.對於標誌位,根本不需要判斷加起來的值是否大於9,無論是否大於9,只要除以10,就可以得到0或者1,這是如何求標誌位
6.對於進製數,也不用判斷是否大於9,進行模10,無論是否大於9,都進行模10,進行儲存即可
public listnode addtwonumbers
(listnode l1, listnode l2)
else
if(l1 == null)
else
if(l2 == null)
else
if(sum >9)
temp.val = sum;
head.next = temp;
head = temp;
l1 = l1.next;
l2 = l2.next;}if
(l1 == null && l2 != null)
if(value >9)
temp.val = value;
head.next = temp;
head = temp;
l2 = l2.next;}}
else
if(l1 != null && l2 == null)
if(value >9)
temp.val = value;
head.next = temp;
head = temp;
l1 = l1.next;}}
if(ifadd ==
true
)return listhead.next;
}}
public listnode addtwonumbers
(listnode l1, listnode l2)
if(carry >0)
return dummyhead.next;
}
其實就是在**的高效性上,我沒有做到最優!以後對於這方面的東西要努力進步。 leetcode打卡12 題號5 最長回文子串
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 暴力解法其實很簡單,就是不停的去抽取子串,然後判斷是否為回文串即可.但是這裡我們的方法在提交的時候會顯...
LeetCode打卡 2 兩數相加
解題思路 同時遍歷給出的鍊錶,使用乙個臨時變數來儲存中間計算數值 自我總結點 1.需要去看看c 結構體裡面寫函式的語法 2.熟悉leetcode的寫題格式 definition for singly linked list.struct listnode listnode int x val x n...
寒假LeetCode打卡(9)
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...