判斷乙個鍊錶是否有環

2021-08-07 02:04:04 字數 1080 閱讀 7868

乙個鍊錶如果是這樣部分有環的應該怎樣判斷

現在可以找出的是乙個鍊錶是否有環,而且可以找出環開始的那個點。

假設有兩個學生a和b在跑道上跑步,兩人從相同起點出發,假設a的速度為2m/s,b的速度為1m/s,結果會發生什麼?

答案很簡單,a繞了跑道一圈之後會追上b!

class node 

}public

class

main

public

static node detechcycle(node head)

node p = head;

node equal=hascycle(head);

//每次都讓head往前走乙個單位然後然equal在環中繞一圈是否可以和head相遇

while (!isreach(p,equal))

return p;

}/**

* 從equal開始出發看是否能夠達到head點

*/private

static

boolean

isreach(node head, node equal)

node p=equal.next;

while (p!=equal)

p=p.next;

}return

false;

}/**

* 兩個接點,乙個跑1個單位和乙個跑2個單位看是否相遇

*/private

static node hascycle(node head)

if (head.next==null)

node p=head;

node q=head.next;

while (p!=q)

p=p.next;

if (q.next==null)

if (q.next.next==null)

q=q.next.next;

}return p;}}

判斷乙個鍊錶是否有環

1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...

判斷乙個鍊錶是否有環

給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到null退出。2...

判斷乙個鍊錶是否有環

思路 如果開始有兩個指標指向頭結點,乙個走的快,乙個走的慢,如果有環的話,最終經過若干步,快的指標總會超過慢的指標一圈從而相遇。如何計算環的長度呢?可以第一次相遇時開始計數,第二次相遇時停止計數。如何判斷環的入口點?碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇...