:input a->b->c->d
:output d->c->b->a
// 鍊錶翻轉
const
reverselist
=function
(head)
return prev;};
let a =
let b =
let c =
let d =
a.next = b,b.next = c ,c.next =d;
reverselist
(a)
:input a->b->c->d->e->f m=2,n=5
:output a-e->d->c->b->f
const
reverselistbetween
=function
(head, m, n)
let curr2 = curr;
//第m個節點
let prev2 = prev;
//開始翻轉
for(
let i = m; i <= n; i++
)//prev:第n個節點 ,curr是第n+1個
if(prev2)
else
curr2.next = curr;
return head;
}
利用快慢指標
const
hascycle
=function
(head)
}return
false
;}
利用特性,fast指標走過的路程是slow指標的2倍
2slow = fast
假設head–>環入口的距離為a,環入口–>fast與slow相遇節點的距離為b,
此節點到環入口的節點距離為c(順時針考慮)
根據兩個指標各自走的路程 代入公式:2(a+b) = a + 2b+ c
=> a = c
表示在快慢指標相遇後,再走c步就能到環入口;從head開始走a步也能到環入口。
所以,在指標相遇後,slow指標繼續走,再從頭開始走乙個新的slow指標,兩者相遇時,就是環入口
const
detectcycle
=function
(head)}if
(!hascycle)
return
null
;while
(slow1 !== slow2)
return slow1;
}
以上內容 學習自b站js老畢
檢查鍊錶是否有環,帶數學推導
部落格已經搬家!請前往 閱讀本文。給定下列列表 4指回2 若有快慢兩個指標,慢指標每次前進一步,快指標每次前進兩步,求兩指標何處相遇?1 2 3 4 解 設兩指標前進n次。n必定大於等於1。in 1 reduce mod n 1,3 mod 2n 1,3 n,integers out 1 c1 z ...
檢查單鍊錶中是否有環
用兩個指標,從頭節點開始遍歷,乙個指標a每次走1步,乙個指標b每次都2步。如果有環,兩個指標相遇前 b位於a後一位時,那麼a,b指標下次相遇。b位於a後兩位時,那麼a,b指標下下次即將相遇。建立鍊錶 public static node createlist int max return first...
檢查鍊錶是否為回文 python實現
coding utf 8 題目描述 請編寫乙個函式,檢查鍊錶是否為回文。給定乙個鍊錶listnode phead,請返回乙個bool,代表鍊錶是否為回文。測試樣例 返回 true 返回 false author chimuuu class listnode def init self,x self....