js實現鍊錶翻轉以及檢查是否有環

2021-10-16 13:19:27 字數 1456 閱讀 3979

: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....