LeetCode编程题——linked-list-cycle(判断单链表是否带环)
程序员文章站
2024-02-28 19:37:58
...
题目描述
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
给一个链表,判断它是否有环?
不能使用额外空间。
解题思路
- 如果链表为空,返回false
- 定义一个快指针 fast,一个慢指针 slow 分别指向链表头结点:
- 当快指针的next不为空时,快指针先走,每次走两步,慢指针每次走一步; 判断两指针是否相等
- 相等返回true,如果走到fast->next==NULL,说明不带环,返回false。
- 问题:为什么快指针要比慢指针快一步?
- 因为1是任何整数的约数,环的长度就是快指针比慢指针多走的长度,这个长度一定可以被1整除,但是不一定被大于1的任何数字整除。所以快指针只能比慢指针快一步。
代码实现
/**
* 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==NULL)
return false;
ListNode*fast=head,*slow=head;
while(fast->next && fast->next->next)
{
fast=fast->next->next;
slow=slow->next;
if(slow==fast)
return true;
}
return false;
}
};
上一篇: Asp.net中判断一个session是否合法的方法
下一篇: jq判断是否点击返回,回到上一页