LintCode 鍊錶求和

2021-07-29 19:04:57 字數 1600 閱讀 9632

1.描述

你有兩個用鍊錶代表的整數,其中每個節點包含乙個數字。數字儲存按照在原來整數中相反的順序,

使得第乙個數字位於鍊錶的開頭。寫出乙個函式將兩個整數相加,用鍊錶形式返回和。

樣例 給出兩個鍊錶3->1->5->null5->9->2->null,返回 8->0->8->null

2.分析

第一眼看過去覺得這個題目把數字倒著分解開儲存到鍊錶中是增加難度,但實際上是減小了,

因為第乙個節點是個位第二個是十位,按照從小到大的順序排列加和就分別從兩個鍊錶中取出

相應位數甲相加,有進製就加入到下乙個鍊錶中。如果其中乙個鍊錶長度大於另乙個鍊錶,說明

這個鍊錶位數更大,之後的位數都是這個鍊錶的位數。如122+28,1在百位上因此加和時第三個

節點(百位只要1自己就可以了)。

3.**

/*** definition for singly-linked list.

* struct listnode

* };

*/class solution

else if(l2==null)

else

}if(c)

return dummy->next;}};

4.總結

這裡a,b,c起著重大作用,a就是當前相同位數的元素加和,b為進製後剩下的數(如13進製後剩3),

c為進上去的數(加法中要麼進1要麼進0即不進製)。b為當前位的數值存入節點中,下乙個節點加和

後再加上上一位進過來的c繼續做判斷,高了就進製剩下的存入節點中。

這裡舉個例子22+78,百位上沒有數

,但加和產生了進製,實際上下面位數加完後還給百位進了乙個1,最後

百位上是1,這個是需要特殊考慮的(紅色**)。

若沒有綠色**c=0把c清空一下,下面的測試資料

輸入

2->8->2->8->2->9->6->4->5->2->5->2->null, 5->8->9->5->6->5->1->8->7->5->5->null

輸出

7->6->2->4->9->4->8->2->3->8->0->3->1->null

期望答案

7->6->2->4->9->4->8->2->3->8->0->3->null

這裡可以看到最後多了乙個1,第乙個鍊錶是12位,第二個鍊錶是11位,加和為12位,

但是由於c=1未清空在綠色**中又執行了一次,因此在鍊錶的最後又加了乙個1變為13位

導致錯誤。

總的來說兩個鍊錶位數相等只需要考慮最後會不會進製(紅色**),而如果位數不等也要

考慮進製,進得位加在高位上而不是加在高位後面比高位更高(綠色**)。

lintcode 鍊錶求和

1.題目 你有兩個用鍊錶代表的整數,其中每個節點包含乙個數字。數字儲存按照在原來整數中相反的順序,使得第乙個數字位於鍊錶的開頭。寫出乙個函式將兩個整數相加,用鍊錶形式返回和。給出兩個鍊錶3 1 5 null和5 9 2 null,返回8 0 8 null 2.思路 考慮如何實現進製 和數的每一位如何...

LintCode 鍊錶求和

描述 你有兩個用鍊錶代表的整數,其中每個節點包含乙個數字。數字儲存按照在原來整數中相反的順序,使得第乙個數字位於鍊錶的開頭。寫出乙個函式將兩個整數相加,用鍊錶形式返回和。樣例 給出兩個鍊錶3 1 5 null和5 9 2 null,返回8 0 8 null definition for singly...

LintCode 鍊錶求和

問題分析 我們通過遍歷兩個鍊錶拿到每個位的值,兩個值加上前一位進製值 0或者1 模10就是該位的值,除以10就是向高位的進製值 0或者1 由於兩個鍊錶可以不一樣長,所以要及時判斷,一旦為null,該位的值就要變成0。有一種情況比較特殊,比如 1 1 1 null,9 8 8 null,最終結果為0 ...