2009-11-25 3 views
4

단일 링크 목록 (SLL)에서 루프가 발생할 수 있습니다.
목록에서 루프를 삭제하려면 먼저 SLL에서 루프를 감지하고 루프를 삭제해야합니다.단일 링크 목록에서 루프 삭제

의사 코드로 SLL에서 루프를 삭제하는 방법을 알려줄 수 있습니까?
3 개의 포인터를 사용하여 수행 할 수 있습니까?
작업을 수행하기위한 다른 방법이 있습니까?

+0

또한이 질문을 참조하십시오 : http://stackoverflow.com/questions/34249/best-algorithm-to-test-if-a-linked-list-has-a-cycle – sharptooth

+0

[에서 루프를 찾는 알고리즘 SSL] (http://ostermiller.org/find_loop_singly_linked_list.html) [루프 삭제를위한 솔루션] (http://tekpool.wordpress.com/2006/09/29/linked-list-detect-a-cycle-in -a-linked-list-and-fix-the-cycle /) –

답변

1

당신이 묻는 것에 대한 많은 해결책이 있습니다. 가장 간단하면서도 비효율적 인 방법 중 하나는 헤드 노드를 기억하면서 목록을 뒤집는 것입니다. 헤드 노드로 돌아 가면 루프가 있음을 알 수 있습니다.

또 다른 방법은 목록의 각 노드에 대해 int를 포함하는 배열을 만드는 것입니다. 노드를 방문 할 때마다 해당 배열의 해당 값을 증가시킵니다. 그런 다음 배열의 값에 둘 이상의 값이 있는지 확인한 다음 여분의 반복이 시작되는 위치와 비교하십시오. 이 방법은 전체 루프 및 작은 루프를 감지합니다. 잘하면이 도움이됩니다.

관련 문제