2 兩數相加

2021-09-12 02:57:11 字數 1325 閱讀 3725

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

思考:首先說明是非空的鍊錶,並且沒有負數,儲存的方式按照低位 -> 高位,所以可以直接累加。建立乙個新的鍊錶結點,然後把後續的值存放到這個結點之後。在加的過程中可能存在進製,所以要設定乙個進製變數carry。因為兩個鍊錶有長有短,所以只要其中乙個鍊錶還沒有走到末尾就可以一直迴圈下去(判斷l1 || l2 已經走到末尾了麼,如果是就不再動了,只要另乙個繼續迴圈就行了),由於鍊錶可能為空,在取當前結點值的時候,先判斷一下,若為空則取0,否則取結點值。while迴圈退出之後,最高位的進製問題要最後特殊處理一下,若carry為1,則再建乙個值為1的結點。

**:

class solution 

if(carry)

return newhead->next;

}};

總結:

1、一開始想判斷兩個鍊錶哪個長,就直接再哪個上進行操作,對位相加之後,把剩下的給拼接上去,後來想想不好處理,如果短的最後一位進製了,那處理拼接鍊錶那一部分就很複雜。

2、計算鍊錶長度每次總是好寫錯。。。

//首先對鍊錶判斷空,若不為空則至少長度為1

int length =1;

while(cur->next)

3、鍊錶的拼接,如果想直接在l1和l2上實現比較麻煩,一般要新開闢乙個節點,然後把兩個鍊錶通過一些約束條件,新增在這個之後。在合併兩個有序鍊錶,使用遞迴的方法,判斷條件 while(l1 && l2) ,最後看是l1空了嗎?沒有就把l1剩下的給拼接到新的鍊錶之後。

class solution 

else

ptr =ptr->next; //合成新鍊錶,無論是list1 還是list2 的結點 新鍊錶的當前結點指標都要向後指一位

}if(l1)

if(l2)

return l.next;

}};

2 兩數相加

平均星級 4.45 239次評分 2018年2月2日 28.6k次 預覽 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 ...

2 兩數相加

給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807 definition for singly l...

2 兩數相加

給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807演算法 我們首先從最低有效位也就是列表 l1和...