示例:
示例 1:
輸入:[1,2,3,4,5]
輸出:此列表中的結點 3 (序列化形式:[3,4,5])
返回的結點值為 3 。 (測評系統對該結點序列化表述是 [3,4,5])。
注意,我們返回了乙個 listnode 型別的物件 ans,這樣:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = null.
示例 2:
輸入:[1,2,3,4,5,6]
輸出:此列表中的結點 4 (序列化形式:[4,5,6])
由於該列表有兩個中間結點,值分別為 3 和 4,我們返回第二個結點。
定義兩個指標和指標的位置,慢指標走一步,快指標走到慢指標的一倍
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
middlenode
(self, head: listnode)
-> listnode:
pre = head
cur = pre
cur_pos =
0 pre_pos =
0while cur.
next
: pre = pre.
next
pre_pos +=
1while cur_pos < pre_pos *
2and cur.
next
: cur = cur.
next
cur_pos +=
1return pre
定義兩個指標和指標的位置,慢指標走一步,快指標走兩步
為什麼使用while cur and cur.next的原因:
[1, 2, 3, 4, 5]
pre = 1, cur = 1
pre = 2, cur = 3
pre = 3, cur = 5
cur.next 為空,返回pre
[1, 2, 3, 4, 5, 6]
pre = 1, cur = 1
pre = 2, cur = 3
pre = 3, cur = 5
pre = 4, cur = none
cur 為空,返回pre,正好是第二個中間節點
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
middlenode
(self, head: listnode)
-> listnode:
pre = head
cur = pre
while cur and cur.
next
: pre = pre.
next
cur = cur.
next
.next
return pre
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
不斷遍歷兩個鍊錶,每次遍歷都將鍊錶a和鍊錶b的值相加,再賦給鍊錶a。如果有進製則記錄乙個進製標誌。
迴圈的條件是鍊錶a不為空或者鍊錶b不為空,這樣當整個迴圈結束時,鍊錶就被串起來了。
注意:當迴圈結束時,如果進製標誌為1還需要處理下邊界條件。
class
solution
:def
addtwonumbers
(self, l1: listnode, l2: listnode)
-> listnode:
a, b = l1, l2
# 定義主指標,指向l1,用來處理
# 1. 迴圈結束時,進製標誌為1
# 2. a,b鍊錶長度不一致
# 的情況,最終返回l1
p =none
# 定義進製標誌
carry =
0while a or b:
# 將鍊錶a,b的值相加,並加上可能的進製
val =
(a.val if a else0)
+(b.val if b else0)
+ carry
# 若val>10說明要進製,carry = 1否則為0
carry =
1if val>=
10else
0# 不論是否進製,val都取個位數的值
val = val %
10# 主指標p指向a,值為val
p, p.val = a if a else b, val
# a,b向後移動,若到都頭,迴圈結束
a, b = a.
next
if a else
none
, b.
next
if b else
none
# 判斷主指標的下乙個指向,若a,b都為空,則指向空,若a,b有乙個不為空,則指向不為空者
p.next
= a if a else b
# 處理迴圈結束時,進製標誌為1的情況
if carry:
p.next
= listnode(1)
return l1
876 鍊錶的中間結點
給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的...
876 鍊錶的中間結點
題目描述 給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnod...
876 鍊錶的中間結點
給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。該題目來自力扣題庫 示例示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 ...