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相遇了,就证明链表中有环,否则无环。
通过代码:
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; } };这个题目如果判断条件或者其他地方写的太繁琐,会容易超时。
相关文章推荐
- 【leetcode】【单链表】【141】Linked List Cycle
- Leetcode#142(链表)-Linked List Cycle II
- 链表-leetcode 141 Linked List Cycle
- [LeetCode-141] Linked List Cycle(判断链表是否有环)
- [leetcode 141] Linked List Cycle----判断链表是否为循环链表
- 141 Linked List Cycle(判断链表是否有环Medium)
- LeetCode 141 Linked List Cycle(链表判环)
- Leetcode#141 Linked List Cycle
- leetcode_c++:链表:Linked List Cycle(141)
- 【LeetCode-面试算法经典-Java实现】【141-Linked List Cycle(单链表中有环)】
- Leetcode 141/142 (链表题) Linked List Cycle && Linked List Cycle II
- 019-141-Linked List Cycle 判断链表是否有环
- 141. Linked List Cycle
- 141. Linked List Cycle
- 【leetcode】Linked List Cycle II,判断链表是否有环
- 12.【链表】Linked List Cycle--Accepted code
- 141 Linked List Cycle
- LeetCode: Linked List Cycle [141]
- 判断链表是否有环 Linked List Cycle, Linked List Cycle II
- 141. Linked List Cycle