鍊錶的中間結點問題

2021-10-04 07:02:34 字數 893 閱讀 7422

因為鍊錶的特殊性:鍊錶不能通過下標訪問對應的元素

所以要採用特殊的辦法進行處理

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 序列化形式 ...