[LeetCode]Linked List Cycle
2014-03-14 11:07 庸男勿扰 阅读(253) 评论(0) 编辑 收藏 举报原题链接:http://oj.leetcode.com/problems/linked-list-cycle/
题意描述:
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
题解:
判断一个单链表中是否有环,这是一道典型的快慢指针的题,具体概念参见百度:http://baike.baidu.com/link?url=6vrn7yMJjWonSHrzGNLZA16JoJZxrLkFuRtJH3oP3PHCBakSKKM2UQH-5xtM9evvEGE385f7Ry9lqsn_Q0AKua
其实理解起来很简单,就是设置两个指针,步长不同,形成一个“追赶”另一个的情形,如果两个相遇了,那么肯定有环,如果有一个变成了NULL(肯定是快的那个),那么就不存在环。
当然也有其他解法,比如比较到达某一顶点的步数,步数多的,肯定是绕了环,其实本质都差不多。
这道题还有一个加强版,假如存在环,找到环的起点。http://www.cnblogs.com/codershell/p/3600958.html
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 bool hasCycle(ListNode *head) { 12 if(head==NULL)return false; 13 ListNode*p = head,*q = head; 14 while(p!=NULL && q!=NULL){ 15 p = p->next; 16 q = q->next; 17 if(q!=NULL) 18 q = q->next; 19 else 20 return false; 21 22 if(p==q) 23 return true; 24 25 } 26 return false; 27 } 28 };
作者:庸男勿扰
出处:http://www.cnblogs.com/codershell
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您觉得对您有帮助,不要忘了推荐一下哦~
出处:http://www.cnblogs.com/codershell
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您觉得对您有帮助,不要忘了推荐一下哦~