Leetcode 鍊錶 2 兩數相加

2021-10-10 16:39:51 字數 1699 閱讀 1829

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

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

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

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

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

這道題,我依稀記得是大二的時候剛開始刷,刷完第一題信心滿滿,刷到第二題就棄坑了哈哈,不過最近因為在刷這個鍊錶系列,於是把這道題抽出來看看,感覺要考慮的特殊情況稍微多了一點,不過邏輯還是很清晰的,於是寫下如下**。

方案一(上文提到的方法):

碼量有點嚇人,不過是因為大量重複**沒封裝的緣故,還有就是經驗不太夠,下面貼個官方題解來分析一下他比我們的**牛在**。

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*/class

solution

else

}return res-

>next;}if

( l2 ==

null

)else

}return res-

>next;

} tmp_int = l1-

>val + l2-

>val;

if( l1-

>next !=

null

)else

cur-

>next = tmp_node;

cur = cur-

>next;

}else

if( l2-

>next !=

null

)else

cur-

>next = tmp_node;

cur = cur-

>next;

}else

else

} l1 = l1-

>next;

l2 = l2-

>next;

}return res-

>next;}}

;

方案2:

官方題解如下:

首先最聰明的一點就是把不等長鍊表中較短的那個鍊錶當作後面全是0,並且利用三目運算子使得程式更加清晰。

另外,將sum的整數部分儲存在乙個變數中可以使**更加清晰,這個是真的妙啊,還需要再仔細品味一下。

class

solution

else

carry = sum /10;

if(l1)

if(l2)}if

(carry >0)

return head;}}

;

同樣是鍊錶的基本操作,但是官方題解給的就是比較簡潔,而這帶來的優勢也是不容易出錯,這是技巧,更是經驗,希望能夠通過反覆練習掌握其精髓。

leetcode 2 兩數相加(鍊錶)

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 ...

leetcode 2 兩數相加(鍊錶)

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...

LeetCode2 兩數相加(鍊錶)

1 獲取鍊錶l1的長度 l2的長度 2 比較兩者的長度,不一致少的部分要在鍊錶的末尾新增0補齊 3 建立新的鍊錶記錄結果 4 逐個移位鍊錶結點,相加,並記錄進製 5 返回最終鍊錶的結果 c 實現 class solution while q next null 獲取l2的長度 對齊 if len1 ...