判断链表是否带环?若带环求环的长度?若带环求环的入口点?
2017-07-16 10:28
323 查看
//链表定义 typedef struct Node { Node(const int& value) : m_value(value) , m_pNext(NULL) {} int m_value; Node* m_pNext; }Node, *pNode; //判断链表是否带环 pair<pNode, bool> IsExistsLoop(pNode pHead) { assert(pHead); pNode fast = pHead; pNode slow = pHead; while (fast&&fast->m_pNext) { fast = fast->m_pNext->m_pNext; slow = slow->m_pNext; if (fast == slow) return make_pair(fast, true);//fast为交点 } //不带环 return make_pair(fast, false); } //求环的长度 int length(pNode pHead) { assert(pHead); if (!IsExistsLoop(pHead).second) return 0; pNode Node = IsExistsLoop(pHead).first; pNode pCur = Node->m_pNext; int count = 1; while (pCur!=Node) { count++; pCur = pCur->m_pNext; } return count; } //求环的入口点,一个从头走,一个从交点处走相遇即是入口点 pNode FindLoopPort(pNode pHead) { assert(pHead); pNode node = IsExistsLoop(pHead).first; pNode pCur = pHead; while (pCur!=node) { pCur = pCur->m_pNext; node = node->m_pNext; } return pCur; }
相关文章推荐
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- -判断链表是否带环?若带环求环的长度?若带环求环的入口点
- 剑指offer 15---判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 剑指offer面试题-判断链表是否带环并求环的入口点和环的长度
- 判断链表是否带环?若带环求环的长度?求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环,若带环求环的长度,若带环求环的入口点
- 链表--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?
- 链表面试题----判断一个单链表是否带环,若带环,求入口点和环的长度
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 链表面试题之判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 剑指offer--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断单链表是否带环? 若带环, 求环的长度? 求环的入口点?
- 17_7_15:判断链表是否有环+求环的长度+求环的入口。设计不能被继承的类,只能堆/栈上创建对象的类
- 链表带环问题求解?是否带环,环的入口点,环长度
- 65. 链表是否带环、环入口、环长度、链表相交问题分析与总结
- 判断单链表是否带环?若带环,求环的长度?求环的入口点?(C语言)
- [算法练习FindLoop]判断单向链表是否存在循环/循环入口/环长度