您的位置:首页 > 编程语言 > Go语言

Leetcode#141(链表)-Linked List Cycle

2017-01-15 22:15 323 查看
题目:

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

Follow up:

Can you solve it without using extra space?

思路:这道题的意思是,给定一个链表,要你判断它是否包含一个环。一开始我理解错了题意,以为是要判断给定的链表是否构成环,所以一看到题目, 

马上想到直接用两个指针s,p指向头结点,s不断往后移动,如果重新移动到p的位置就说明构成环...于是提交上去自然是错了~~

正确的题意是判断链表中是否包含环,所以有可能如下图这种情况:



所以正确的思路是,设置s,p两个指针指向头结点,s每次往后移动两步,p每次往后移动1步。如果s和p相遇了,就证明链表中有环,否则无环。

通过代码:

class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *p=head,*s=head;
while(s!=NULL&&s->next!=NULL&&p!=NULL) //p!=NULL这个条件可以省略,s!=NULL容易被忽略,如果省掉会报runtime error(对空指针进行了引用)
{
s=s->next->next;
p=p->next;
if(s==p)return true;
}
return false;
}
};
这个题目如果判断条件或者其他地方写的太繁琐,会容易超时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息