[Leetcode] 141. Linked List Cycle
Algorithm2021. 8. 7. 17:12
반응형
Identifying the Problem
주어진 linked list가 무한 순회하는지 판단한다.
Organizing thoughts
<정답 참조했음>
비유를하자면 제논의 역설과 비슷하다.
운동장을 육상선수와 내가 돌고, 육상선수가 나보다 2배 빠르다고 했을 때,
둘이 언젠가 만나는 지점이 있음
이 문제에선 그 지점을 찾으면 된다.
Sourcecode
bool hasCycle(struct ListNode *head) {
struct ListNode *slow, *fast;
if(!head || !(head->next)) //노드의 수가 1개 이하인 경우 false 리턴
return false;
slow = head->next; //2번째 노드
fast = head->next->next; //3번째 노드
while(fast && fast->next)
{
if(slow == fast) return true; //처음과 끝이 같아지는 지점
slow = slow->next;
fast = fast->next->next; //slow의 2배속도로 탐색한다.
}
return false;
}
New things learned
- 하나의 배열에 탐색 index를 여럿두면 배열 여러 개를 복사한 효과를 낸다.
반응형
'Algorithm' 카테고리의 다른 글
[Leetcode] 168. Excel Sheet Column Title (0) | 2021.08.07 |
---|---|
[Leetcode] 155. Min Stack (0) | 2021.08.07 |
[Leetcode] 136. Single Number (0) | 2021.08.07 |
[Leetcode] 125. Valid Palindrome (0) | 2021.08.07 |
[Leetcode] 121. Best Time to Buy and Sell Stock] (0) | 2021.08.07 |
댓글()