leetcode 142 링 링크 의 시작 점 찾기
4637 단어 알고리즘
4. 567917. 링크 를 지정 하고 링크 가 링 에 들 어가 기 시작 하 는 첫 번 째 노드 를 되 돌려 줍 니 다.링크 에 고리 가 없 으 면 null 로 돌아 갑 니 다
4. 567917. 설명: 주어진 링크 를 수정 할 수 없습니다
가 급 적 추가 저장 공간 을 사용 하지 않 는 다.
분석 하 다.
4. 567917. 이것 은 고 리 를 찾 는 문제 와 비슷 하지만 난이도 가 증가 했다.많은 시간 을 들 여 했다
4. 567917. 빠 른 지침 을 이용 하여 고리 가 있 는 지 없 는 지 를 찾 는 것 이 분명 하 다.그림 을 그 려 보 니 느 린 지침 이 가 는 걸음 수 는 링 의 길이 인 것 으로 나 타 났 다.그래서 다른 지침 이 처음부터 출발 하면 느 린 지침 이 계속 앞으로 가면 그들 이 만 나 는 노드 는 바로 링 의 입구 이다
4. 567917. 1 판 코드 는 기록 길이 의 정형 을 사용 하여 절 차 를 더 밟 았 다.뒤에 최적화 됐어 요
코드
/**
* 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) {
// , , , , 。
if((head == nullptr) || (head->next == nullptr)){
return nullptr;
}
int count = 0;
ListNode* normal = head;
ListNode* fast = head;
//
while(true){
if((fast->next == nullptr) || (fast->next->next == nullptr)){
return nullptr;
}
fast = (fast->next)->next;
normal = normal->next;
count += 1;
if(fast == normal){
break;
}
}
// count
fast = head;
while(count > 0){
fast = fast->next;
count--;
}
normal = head;
while(true){
if(normal == fast){
return fast;
}
fast = fast->next;
normal = normal->next;
}
}
};
개량 버 전 코드
/**
* 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) {
// , , , , 。
if((head == nullptr) || (head->next == nullptr)){
return nullptr;
}
// int count = 0;
ListNode* normal = head;
ListNode* fast = head;
//
while(true){
if((fast->next == nullptr) || (fast->next->next == nullptr)){
return nullptr;
}
fast = (fast->next)->next;
normal = normal->next;
// count += 1;
if(fast == normal){
break;
}
}
// count
fast = head;
// while(count > 0){
// fast = fast->next;
// count--;
// }
while(true){
if(normal == fast){
return fast;
}
fast = fast->next;
normal = normal->next;
}
}
};
총결산
링크 문 제 는 역시 빠 르 고 느 린 지침 의 응용 과 그림 을 그 리 는 것 을 중시 해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.