002 兩數相加

2021-10-21 02:36:27 字數 4744 閱讀 8349

# 計算單鏈表長度

length =0if

not l:

return

0else

:while l:

length +=

1 l = l.

next

return length

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

length1 = getlength(l1)

length2 = getlength(l2)

flag =

false

if length1 > length2:

# 保持l2為長鍊錶

l3 = l1

l1 = l2

l2 = l3

l3 = l2 # 直接在l2上相加,l3指向l2

if length1 == length2:

# 當長度相同時

while l1.

next

:# 為了防止產生最高位進製,新增結點時指標丟失,用next

if flag:

l2.val +=

1 flag =

false

l2.val += l1.val

if l2.val >9:

l2.val -=

10 flag =

true

l1 = l1.

next

l2 = l2.

next

if flag:

# 如果向最高位進製

l2.val +=

1 flag =

false

l2.val += l1.val

if l2.val >9:

l2.val -=

10 flag =

true

if flag:

# 最高位向下一位進製(新增結點)

l2.next

= listnode(1)

else

:# l2長時

while l1:

# 計算公共部分

if flag:

l2.val +=

1 flag =

false

l2.val += l1.val

if l2.val >9:

l2.val -=

10 flag =

true

l1 = l1.

next

l2 = l2.

next

while l2.

next

:# 計算l2多餘部分,同樣,為了防止新增節點時指標丟失,用next

if flag:

l2.val +=

1 flag =

false

if l2.val >9:

l2.val -=

10 flag =

true

l2 = l2.

next

if flag:

# 向最高位進製

l2.val +=

1 flag =

false

if l2.val >9:

l2.val -=

10 flag =

true

if flag:

# 最高位向下一位進製

l2.next

= listnode(1)

return l3

2.2 我的改良

# definition for singly-linked list.

# class listnode:

# def __init__(self, val=0, next=none):

# self.val = val

# self.next = next

defgetlength

(l):

# 計算單鏈表長度

length =0if

not l:

return

0else

:while l:

length +=

1 l = l.

next

return length

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

length1 = getlength(l1)

length2 = getlength(l2)

flag =

false

if length1 > length2:

# 保持l2為長鍊錶

l3 = l1

l1 = l2

l2 = l3

l3 = l2 # 直接在l2上相加,l3指向l2

while l1:

# 公共部分相加

if flag:

l2.val +=

1 flag =

false

l2.val += l1.val

if l2.val >9:

l2.val -=

10 flag =

true

l1 = l1.

next

p = l2

l2 = l2.

next

while l2:

# 當l2有剩餘時

if flag:

l2.val +=

1 flag =

false

if l2.val >9:

l2.val -=

10 flag =

true

p = l2

l2 = l2.

next

if flag:

# 當最高位向後一位進製時(需要新增節點時)

p.next

= listnode(1)

return l3

# 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:

head = listnode(l1.val+l2.val)

# 建立結果列表

cur = head # 滾動指標

while l1.

next

or l2.

next

:# 當加法沒有結束時

l1 = l1.

next

if l1.

next

else listnode(

)# 遍歷結束新增結點(根據結點定義預設為0)

l2 = l2.

next

if l2.

next

else listnode(

) cur.

next

= listnode(l1.val + l2.val + cur.val //10)

# 建立新結點,本位值相加+前一位的進製

cur.val = cur.val %

10# 原結點取餘

cur = cur.

next

# 指標滾動

if cur.val >=10:

# 當最高位產生進製時

cur.

next

= listnode(cur.val //10)

# 新增新結點

cur.val = cur.val %

10# 本位取餘

return head

LeetCode002 兩數相加

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

LeetCode 002 兩數相加

給你兩個非空的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字0之外,這兩個數都不會以0開頭。輸入 l1 2,4,3 l2 5,6,4 輸出 7,0,8 解釋 342 465 8...

Leetcode 002 兩數相加

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