因為鍊錶的特殊性:鍊錶不能通過下標訪問對應的元素
所以要採用特殊的辦法進行處理
1、通過將鍊錶內容新增到陣列中,轉為處理陣列問題:
class
solution
:def
middlenode
(self, head: listnode)
-> listnode:
a =[head]
while a[-1
].next
:#a[-1]表示陣列最後乙個元素-1
].next
)return a[
len(a)//2
]
2、使用快慢雙指標,快指標一次走兩步,慢指標一次走一步,這樣快指標到頭,慢指標剛好走到一半:
class
solution
:def
middlenode
(self, head: listnode)
-> listnode:
slow = fast = head
while fast and fast.
next
: slow = slow.
next
fast = fast.
next
.next
#兩個next表示fast一次走兩步
return slow
總結:
法1法2的時間複雜度都是o(n)。
法1空間複雜度為0(n),因為建立了乙個陣列;
法2空間複雜度為0(1),因為只需要常數空間存放 slow 和 fast 兩個指標。
鍊錶的中間結點
題目 給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode ...
鍊錶的中間結點
給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的...
鍊錶的中間結點
力扣題目鏈結 給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。例項1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 例項2 輸入 1,2,3,4,5,6 輸出 此列表中的結點 4 序列化形式 ...