力扣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。本文簡單起見就取第二個中間節點。思想 其實思想很簡單,其實就是跟 判斷單鏈表儲存的字串是否為 回文串 中求中間節點的方法一模一樣,使用...