【LeetCode】141.Linked List Cycle
1228 ワード
タイトル:
Given a linked list, determine if it has a cycle in it.
Follow up: Can you solve it without using extra space?
理解:
余分なスペースがない場合は、チェーンテーブルにリングがあるかどうかを判断します.
分析:
このテーマは出会い問題として理解できる.もし二人が同時に同じ場所から出発して、一人はスピードが速くて、一人はスピードが遅くて、もしこの経路にリングがあれば、彼らはきっと出会って、この時スピードの速い人はちょうどスピードの遅い人より多くこのリングの道を歩いた.
これにより、2つのポインタformerとlatterを設定し、同時に最初からノードを出発し、formerは一度に2つのノードを歩き、latterは一度に1つのノードを歩くことができる.formerがlatterと出会うと、このチェーンテーブルにはリングが含まれていることを示します.formerまたはlatterがNULLに遭遇した場合、このチェーンテーブルにはループが含まれていないことを示します.
コード:
Given a linked list, determine if it has a cycle in it.
Follow up: Can you solve it without using extra space?
理解:
余分なスペースがない場合は、チェーンテーブルにリングがあるかどうかを判断します.
分析:
このテーマは出会い問題として理解できる.もし二人が同時に同じ場所から出発して、一人はスピードが速くて、一人はスピードが遅くて、もしこの経路にリングがあれば、彼らはきっと出会って、この時スピードの速い人はちょうどスピードの遅い人より多くこのリングの道を歩いた.
これにより、2つのポインタformerとlatterを設定し、同時に最初からノードを出発し、formerは一度に2つのノードを歩き、latterは一度に1つのノードを歩くことができる.formerがlatterと出会うと、このチェーンテーブルにはリングが含まれていることを示します.formerまたはlatterがNULLに遭遇した場合、このチェーンテーブルにはループが含まれていないことを示します.
コード:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *former=head;
ListNode *latter=head;
while(former!=NULL&&latter!=NULL)
{
former=former->next;
if(former!=NULL)
former=former->next;
else
return false;
latter=latter->next;
if(former==latter)
return true;
}
return false;
}
};