件名の説明:
与えられたリングはリストにリンクするかどうかを決定します
拡張:
あなたは、余分なスペースがそれの解決策を与えて使用することはできませんか?
チェーンリングがあります。
私たちは、最初の長鎖-鋸、図aの明確なリングを持っている必要があり、それの特性は何チェーンのリングがあるのですか?ヘッドスタートトラバースから、最終的には、リングを介してリング、ループに入り、nullになりません。
アイデア:
1、問題を解決するために他の構造を使用することができます余分なスペースの問題を考慮せずに。
ハッシュテーブルを使用することができる、各ノードのノードアドレス環が存在する場合、それをキーとしてhaspmapアドレスが付加されていない、ハッシュマップのキーは存在しない探してトラバース。
2、余分なスペースを考慮してください。
二つのポインタの速度を使用し、高速の手は一度遅いポインタに、ステップ、図2の2つのステップを歩きました
リングは、最終的にリングを横断する二つのポインタを持っている場合、我々は速い==遅い会う予定
ヌルへのリング、高速またはfast.next意志最初のポイントが存在しない場合
注:コードNULLポインタの問題を書くときには注意してください、空でないリストを決定することが発端。
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null){
return false;
}
ListNode p1 = head.next;
ListNode p2 = head.next.next;
while(p1 != p2 && p2 != null && p2.next != null){
p1 = p1.next;
p2 = p2.next.next;
}
if(p1 == p2){
return true;
}
else{
return false;
}
}
}
public class Solution {
//nocoder pass
public boolean hasCycle(ListNode head) {
if (head == null) {
return false;
}
ListNode slow = head;
ListNode fast = head;
//仅用判断fast,因为fast快,无环一定比slow先为null
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
if (fast == slow) {
return true;
}
}
return false;
}