/**
* 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){
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while((slow != null) && (fast != null) && (slow.next != null) && (fast.next != null)){
if(slow == fast){
return true;
}
slow = slow.next;
fast = fast.next.next;
}
return false;
}
}
순환 연결된 목록을 검색하기 위해 우리는 2 포인터 기술을 천천히 그리고 빠르게 사용합니다.순환 링크 된 목록 논리
내 질문은 포인터가 순환 목록 인 경우 은이 어떤 점에서 교차해야하는지 궁금한가요?
그런데 Circular linked list에는 두 개의 포인터가 필요하지 않습니다. 주로 큐와 피보나치 힙을 구현하는 데 사용됩니다. 시작한 첫 번째 노드에 도달하면 트래버스가 중지됩니다. –
@ PorkkoM 질문은 순환 고리를 사용하지만 비 원형 목록의 손상된 체인을 감지하는 링크 된 목록 구현과 관련이 없습니다. – Andreas
복잡성과 관련하여 링크 된 목록과 세트를 동시에 사용하지 않는 이유는 무엇입니까? 연결된 목록에서 항목의 순서를 지키고 인덱싱 된 구조에서 반복 (주기)을 추적합니다. 그런 다음 기존 [LinkedHashSet] (https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html)을 사용하지 않는 것이 좋습니다. 이미 구현되고 테스트되었으며 add()에서 false를 반환하는 대신 예외를 throw하는 등의 사용자 정의 비헤이비어를 추가하려는 경우 상속 할 수 있습니다. –
andreim