};1)獲取鍊錶l1的長度、l2的長度
2)比較兩者的長度,不一致少的部分要在鍊錶的末尾新增0補齊
3)建立新的鍊錶記錄結果
4)逐個移位鍊錶結點,相加,並記錄進製
5)返回最終鍊錶的結果
c++實現:
class solution
while(q->next!=null)//獲取l2的長度
//對齊
if(len1>len2)//l1較長,在l2末尾補零
}else//l2較長,在l1末尾補零
}//求和
p=l1;//回到鍊錶的初始位置
q=l2;//回到鍊錶的初始位置
bool count=false;//記錄進製
listnode* l3=new listnode(-1);//存放結果的鍊錶
listnode* w=l3;//l3的移動指標 w
int i=0;//記錄相加結果
while(p!=null&&q!=null)
//特殊情況考慮
if(count)//若最後還有進製
return l3->next;}};
時間複雜度o(n)
注意:
python3實現
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class solution:
def addtwonumbers(self, l1: listnode, l2: listnode) -> listnode:
#建立新的鍊錶
prenode = listnode(0)
lastnode = prenode#移位鍊錶lastnode
val = 0#進製
while val or l1 or l2:
val, cur = divmod(val + (l1.val if l1 else 0) + (l2.val if l2 else 0), 10)#函式返回val 進製 cur 取餘值
lastnode.next = listnode(cur)
lastnode = lastnode.next
l1 = l1.next if l1 else none
l2 = l2.next if l2 else none
return prenode.next
python divmod() 函式把除數和餘數運算結果結合起來,返回乙個包含商和餘數的元組(a // b, a % b)。
參考:
leetcode 2 兩數相加(鍊錶)
給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 ...
leetcode 2 兩數相加(鍊錶)
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
LeetCode 2 兩數相加,鍊錶遞迴
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...