2 兩數相加

2021-10-02 13:45:48 字數 4131 閱讀 4141

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

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

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

示例:這道題目給出的是兩個鍊錶的頭。

要求輸出的是求出的目的鍊錶的頭。

python**

class

solution

:def

addtwonumbers

(self, l1: listnode, l2: listnode)

-> listnode:

l2 = listnode(0)

# 建立乙個頭節點

l = l2 # 把頭節點保留下來

c =0# 進製標誌

while l1 is

notnone

or l2 is

notnone

:if l1 is

notnone

and l2 is

notnone

:# 當兩個連表都不為空時

l0 = listnode(0)

#先建立乙個新的鍊錶

l0.val =

(c + l1.val + l2.val)%10

c =(c + l1.val + l2.val)

//10

l.next

= l0 # 把新建立的節點接到目的鍊錶的最後乙個節點的next

l = l.

next

# 將三個鍊錶都向後移動乙個

l1 = l1.

next

l2 = l2.

next

elif l2 is

notnone

: l0 = listnode(0)

l0.val =

(c + l2.val)%10

c =(c + l2.val)

//10

l.next

= l0

l = l.

next

l2 = l2.

next

else

: l0 = listnode(0)

l0.val =

(c + l1.val)%10

c =(c + l1.val)

//10

l.next

= l0

l = l.

next

l1 = l1.

next

if c !=0:

# 若最高有進製則再建立乙個節點

l.next

= listnode(c)

l2 = l2.

next

# 頭結點裡的資料不具有意義,不要!

return l2

python完整**
# 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:

l2 = listnode(0)

l = l2

c =0while l1 is

notnone

or l2 is

notnone

:if l1 is

notnone

and l2 is

notnone

: l0 = listnode(0)

l0.val =

(c + l1.val + l2.val)%10

c =(c + l1.val + l2.val)

//10

l.next

= l0

l = l.

next

l1 = l1.

next

l2 = l2.

next

elif l2 is

notnone

: l0 = listnode(0)

l0.val =

(c + l2.val)%10

c =(c + l2.val)

//10

l.next

= l0

l = l.

next

l2 = l2.

next

else

: l0 = listnode(0)

l0.val =

(c + l1.val)%10

c =(c + l1.val)

//10

l.next

= l0

l = l.

next

l1 = l1.

next

if c !=0:

l.next

= listnode(c)

l2 = l2.

next

return l2

defstringtointegerlist

(input):

return json.loads(

input

)def

stringtolistnode

(input):

# generate list from the input

numbers = stringtointegerlist(

input

)# now convert that list into linked list

dummyroot = listnode(0)

ptr = dummyroot

for number in numbers:

ptr.

next

= listnode(number)

ptr = ptr.

next

ptr = dummyroot.

next

return ptr

deflistnodetostring

(node):if

not node:

return

"" result =

""while node:

result +=

str(node.val)

+", "

node = node.

next

return

"["+ result[:-

2]+"]"

defmain()

:import sys

import io

defreadlines()

:buffer

, encoding=

'utf-8'):

yield line.strip(

'\n'

) lines = readlines(

)while

true

:try

: line =

next

(lines)

l1 = stringtolistnode(line)

; line =

next

(lines)

l2 = stringtolistnode(line)

;

ret = solution(

).addtwonumbers(l1, l2)

out = listnodetostring(ret)

;print

(out)

except stopiteration:

break

if __name__ ==

'__main__'

: main(

)

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和...