給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
思路:
(思路可能描述的不是很好,不想看可以直接看**)
0.初始定義兩個雙指標l1,l2,分別指向兩個鍊錶的頭結點。
定義乙個啞結點,定義乙個node指標指向啞結點。
1.對兩個指標指向的結點的值(若非空則為當前值,否則為0)相加。當前位的值為相加之後對10取餘,進的數為對10整除。
1.1.若相加之後大於9,需要向下一位進1。而下一位的值相加的時候還要考慮是否有前一位的進1。因此,我們還要初始化乙個count = 0,表示需要向下一位進的數。
1.2.若相加之後小於等於9,無需進1.
2.node.next 為以1.中求得的值構造的結點,更新node = node.next
更新l1 = l1.next if l1 else none,l2 = l2.next if l2 else none
3.重複步驟1,2,直到l1,l2都為空,且count為0.
**如下:
# definition for singly-linked list.
# class listnode:
# def __init__(self, val=0, next=none):
# self.val = val
# self.next = next
class
solution
:def
addtwonumbers
(self, l1: listnode, l2: listnode)
-> listnode:
count =
0# 要進製的值
head = listnode(
none
)# 啞結點
node = head # 指向啞結點的指標
while l1 or l2 or count:
a1 = l1.val if l1 else
0# l1指向的結點的值
a2 = l2.val if l2 else
0# l2指向的結點的值
sum= a1 + a2 + count # 還有加上進製的值
node.
next
= listnode(
sum%10)
# 構造當前結點
count =
sum//
10# 更新進製的值
node = node.
next
# 更新要返回的鍊錶的指標
l1 = l1.
next
if l1 else
none
# 更新l1指標
l2 = l2.
next
if l2 else
none
# 更新l2指標
return head.
next
# 返回啞結點的下一位結點
leetCode 鍊錶專題
sort a linked list in o n log n time using constant space complexity.用歸併排序 其中只是建立了乙個prehead節點 占用空間o 1 時間o nlogn public class solution 常規合併排序思路 listnod...
LeetCode 鍊錶專題
返回兩個鍊錶相交的節點 class solution object def getintersectionnode self,heada,headb type head1,head1 listnode rtype listnode if not heada and not headb return ...
鍊錶專題 4 鍊錶
鍊錶是一大堆節點合起來連起來組成的表的總稱。其中每個節點中都有指標變數指向列表中的下乙個節點。鍊錶中第乙個節點被稱之為表頭 head 所以將第乙個節點的指標變數命名為head。最後乙個節點並沒有神馬特殊的名字,但是它 最後乙個節點 有一項特殊的屬性 最後乙個節點將null作為最後乙個變數的值 所以檢...