如何找到單鏈表的中間節點

2021-10-10 17:09:07 字數 1020 閱讀 8872

力扣p148

思路:借用兩個快慢不同的指標,開始的時候讓兩個指標都指向鍊錶第乙個結點的位置,然後,讓快指標一次走兩步,讓慢指標一次走一步。

鍊錶結點個數為奇數個時:當快指標走到null前面乙個結點的時候,慢指標此時剛好指向鍊錶中間結點。

鍊錶結點個數為偶數個時:當快指標走到null的時候,慢指標此時剛好指向鍊錶中間結點。

public listnode sortlist

(listnode head)

//------主要**實現如下-------

listnode fnode = head;

listnode shead = head;

while

(fnode.next != null && fnode.next.next != null)

//--------------------------

listnode midnode = shead.next;

shead.next = null;

listnode lefthead =

sortlist

(head)

; listnode righthead =

sortlist

(midnode)

;//將兩個鍊錶慢慢合併,這個自己實現吧0v0

return

merge

(lefthead, righthead)

;}

建議先做完再看答案

public listnode middlenode

(listnode head)

listnode fnode=head;

listnode snode=head;

while

(fnode.next!=null && fnode.next.next!=null)

return fnode.next!=null?snode.next:snode;

}

單鏈表面試 找到未知長度的單鏈表的中間節點

找到未知長度的單鏈表的中間節點普通方法 1.確定單鏈表長度l,2.再次找到l 2次的中間節點。快速方法 快慢指標 原理 設定兩個指標search md都指向單鏈表的頭節點。其中search的移動速度是mid的2倍。當 search指向末尾節點的時候,mid正好就在中間了。這也是標尺的思想。快慢指標要...

騰訊 快速找到未知長度單鏈表的中間節點

普通的方法很簡單,首先遍歷一遍單鏈表以確定單鏈表的長度l。然後再次從頭節點出發迴圈l 2次找到單鏈表的中間節點。演算法複雜度為o l l 2 o 3l 2 能否再優化一下這個時間複雜度呢?有乙個很巧妙的方法 設定兩個指標 fast slow都指向單鏈表的頭節點。其中 fast的移動速度是 slow的...

單鏈表求中間節點

難度 兩星 單鏈表求中間節點分為兩種情況 1 單鏈表長度為奇數時,如abcde,那麼中間節點就是c。2 單鏈表長度為偶數時,如abcdef,那麼中間節點有兩個c和d。本文簡單起見就取第二個中間節點。思想 其實思想很簡單,其實就是跟 判斷單鏈表儲存的字串是否為 回文串 中求中間節點的方法一模一樣,使用...