Liクラスプ141リングチェーンウォッチ
1.タイトル
2.私の最初の考えと問題
ハッシュテーブルまたは高速ポインタと低速ポインタの方法を覚えておいてください。
ハッシュテーブルメソッドの問題を解決するときは、ロジックに注意してください。!set.add(temp)ステートメントを実行して、セットにtempを追加し、ブール値を返します。
3.問題解決方法1:ハッシュテーブル
public class Solution {
public boolean hasCycle(ListNode head) {
Set<ListNode> set = new HashSet<>();
ListNode temp = head;
while(temp != null){
if(!set.add(temp)){
return true;
}
temp = temp.next;
}
return false;
}
}
4.問題解決方法2:速いポインターと遅いポインター
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null){
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while(slow != fast){
if(fast == null || fast.next == null){
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}
書き出すだけです。
ここで、最初にheadとhead.nextがnullであるかどうか
を判別し、次にfastを定義した後にfastとfast.nextが空であるかどうかを判別することに注意してください。このステップは無視できません。