141.Linked List Cycle 快慢指针

问题描述:

Given a linked list, determine if it has a cycle in it.

 

我的思路:

用一个指针指向链表头部,另一个指针在链表上移动。若两个指针指向地址相等,则存在环。

然后我没过OJ:)

因为循环链表的尾部并不一定链接头部,可能链接任意节点,此时会陷入死循环。

所以应用快慢指针。

两个指针的步长不同,若存在环,必然会相遇。

 

代码实现(c++):

class Solution {
public:
    bool hasCycle(ListNode *head) {
        ListNode *p1 = head, *p2 = head;
        while (p2 && p2->next) {
            p1 = p1->next;
            p2 = p2->next->next;
            if (p1 == p2) return true;
        }
        return false;
    }
};

 

posted @ 2018-05-17 02:00  妖域大都督  阅读(112)  评论(0编辑  收藏  举报