Leetcode鍊錶專題

2021-10-10 11:51:56 字數 1766 閱讀 4180

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

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

您可以假設除了數字 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作為最後乙個變數的值 所以檢...