728x90
반응형
영어로 문제를 푼다는것은 자신감을 떨어뜨리고 내가 맞게 해석했는지 의문이 든다... 리트코드에 적응하면 조금은 괜찮아질거라 믿으며 글을쓴다.
이 문제는 모르면 못푸는 문제이다. 몰라서 못풀었고 토끼와 거북이 알고리즘이란 것을 알게되어 배움의 의미로 글을 작성한다.
토끼와 거북이 알고리즘이란
토끼와 거북이 알고리즘은 LinkedList에서 순환 루프 여부를 확인하고 순환 루프의 시작 노드를 알아내는 데 사용되는 알고리즘이다.
자세한 증명 과정은 다음과 같다.
코드
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode* rabbit = head;
ListNode* tortoise = head;
while (rabbit) {
if(rabbit->next == NULL)
{
rabbit = rabbit->next;
break;
}
rabbit = rabbit->next->next;
tortoise = tortoise->next;
if(rabbit == tortoise) break;
}
if(rabbit == NULL) return NULL;
tortoise = head;
while (1) {
if(rabbit == tortoise) return rabbit;
rabbit = rabbit->next;
tortoise = tortoise->next;
}
return NULL;
}
};
728x90
반응형
'Algorithm' 카테고리의 다른 글
[Algorithm] C++ 문자열 공백 포함해서 입력받기(feat. getline(), cin.getline() 사용하기) (0) | 2022.01.22 |
---|---|
[Algorithm] priority_queue 비교연산자 구현 (feat. struct compare, 외우기 쉬운 방법) (0) | 2022.01.21 |
[C++] string::to_string 사용하기(feat. int, double, float -> stirng 변환) (0) | 2022.01.02 |
[C++] string 자르는 2가지 방법(feat. istringstream 이용하기, substr 이용하기) (0) | 2021.12.31 |
[C++] stringstream 사용법(feat. stream과 버퍼란 무엇인가?) (0) | 2021.12.31 |