단일 연결된 목록의주기를 감지하는 것은 잘 알려진 문제입니다. 나는이 질문이 인터넷 전체에서 수천 번 요구되었다는 것을 안다. 내가 다시 묻는 이유는 내가 다른 곳에서 만나지 못한 해결책을 생각하기 때문입니다. (나는 그것을 깊이 탐구하지 않았다는 것을 인정한다).단일 링크 된 목록의주기 검색
내 솔루션은 다음과 같습니다
일부 노드에 연결리스트 포인터를 감안할 때이 노드 사이의 연결을 해제하고 노드 -> 다음(); 그런 다음 node-> next()에서 시작하여 끝 (루프가 없음을 의미) 또는 루프에 있음을 노드에 도달 할 때까지 트래버스합니다.
위의 해결 방법에는 어떤 것이 있습니까?
참고 : 완료되면 링크에 다시 가입하십시오.
(전체 목록의 기간 즉, 사이클) 완전한 사이클을 감지하기 위해 노력할 것
대부분의 솔루션은 두 가지 "주자"가 서로 다른 속도로 최상의 솔루션이라고 제안합니다. O (n) 일 수도 있고, 내 솔루션 O (n)도 아닙니다. –
링크를 끊을만한 이유가 보이지 않습니다. 노드를 감시 멤버로 취급하십시오. 문제 : 노드가 a 인 경우 알고리즘이 a-> b-> c-> d-> e-> c에서 작동하지 않습니다. 알고리즘은 마지막 노드가 첫 번째 노드를 가리키는 루프 만 탐지합니다. –
루프가 전역 적이 지 않으면이 작업이 수행되지 않습니다. 예 :'a -> b -> c -> b -> c -> b -> c -> b -> ... –