题意
判断一个链表是否有环
思路
我们可以考虑这样两个人:一个人每次走一步,一个人每次走两步,如果有环:他们总能在一圈左右后相遇,如果无环,有一个一定会走到终点。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* go(ListNode *cur) {
cur = cur->next;
return cur;
}
bool hasCycle(ListNode *head) {
if (head == NULL) return false;
ListNode *first = head, *second = head->next;
while (1) {
if (first == NULL || second == NULL) return false;
if (first == second) return true;
first = go(first);
second = go(second);
if (second == NULL) return false;
second = go(second);
}
return false;
}
};