141. Linked List Cycle
1781 ワード
前回習った円検出アルゴリズムを使用する場合
ちなみに、合格しなかったテストケースって本当ですか…^^
転がっている様子を見て
head=nullの場合、falseはより包括的です.
f = head, h = head.nextに変更(前の2つはhead)
理由)二人が同じなら、必死にtrueを投げて、バカよ...
while文f.next=null|b.next.next==null、これでは循環するものを永遠につかめない=>f!=bは正しい
そうするとfalse文をb=null、b.next=====>bがfより速い
テストがすべて合格した場合はtrue
Runtime: 0 ms, faster than 100.00% of Java online submissions for Linked List Cycle.
Memory Usage: 39.1 MB, less than 48.11% of Java online submissions for Linked List Cycle.
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode f = head, b = head;
while (f.next != null && b.next.next != null) {
int v1 = f.next.val;
int v2 = b.next.next.val;
if (v1 == v2) {
return true;
}
f = f.next;
b = b.next.next;
}
return false;
}
}
会いたいアルゴリズムを書いたのですが、解けませんでした・・・ちなみに、合格しなかったテストケースって本当ですか…^^
転がっている様子を見て
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null) {
return false;
}
ListNode f = head, b = head.next;
while (f != b) {
if (b == null || b.next == null) {
return false;
}
f = f.next;
b = b.next.next;
}
return true;
}
}
そのアルゴリズムが少し間違っていることに気づいて、変わりました.head=nullの場合、falseはより包括的です.
f = head, h = head.nextに変更(前の2つはhead)
理由)二人が同じなら、必死にtrueを投げて、バカよ...
while文f.next=null|b.next.next==null、これでは循環するものを永遠につかめない=>f!=bは正しい
そうするとfalse文をb=null、b.next=====>bがfより速い
テストがすべて合格した場合はtrue
Runtime: 0 ms, faster than 100.00% of Java online submissions for Linked List Cycle.
Memory Usage: 39.1 MB, less than 48.11% of Java online submissions for Linked List Cycle.
Reference
この問題について(141. Linked List Cycle), 我々は、より多くの情報をここで見つけました https://velog.io/@jwade/141.-Linked-List-Cycleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol