判断链表有没有环。可以利用“快慢指针”来解题。设置两个指针 walker 和 runner,walker 每次移动一步,runner 每次移动两步。如果链表有环的话,那么walker 和 runner 一定会相遇。
/**
* 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) {
if (!head) return false;
ListNode* p1 = head;
ListNode* p2 = head;
while(p2 && p2->next){
p1 = p1->next;
p2 = p2->next->next;
if(p1 == p2){
return true;
}
}
return false;
}
};
Leetcode: O(1)-Space-Solution
漫画算法:如何判断链表有环?
判断链表中是否有环 ----- 有关单链表中环的问题
关于链表的面试问题(判断一个单链表中是否有环)
给定单链表,判断是否有环,如果有返回环入口
网友评论