링크드 리스트에 사이클이 존재하면 사이클의 시작노드를 반환하고, 사이클이 존재하지 않는다면 null
을 반환하는 문제이다.
Input: head = [3,2,0,-4], pos = 1
Output: tail connects to node index 1
주어진 링크드 리스트에 사이클 유무를 알기 위해서 일명 토끼와 거북이 알고리즘을 사용한다. 👉 참고 한칸씩 이동하는 slow
포인터와 두칸씩 이동하는 fast
포인터, 두개의 포인터를 이용해 사이클을 찾는다.
null
을 반환한다. /**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var detectCycle = function(head) {
let slow = head;
let fast = head;
while (fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
if (slow === fast) {
let n1 = head;
let n2 = slow;
while (n1 !== n2) {
n1 = n1.next;
n2 = n2.next;
}
return n1
}
}
return null;
};