判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?
2017-07-17 22:00
309 查看
1、怎么判断一个单链表是否带环
如果单链表带环,那么从链表头开始时遍历就会进入死循环。可以用两个速度不同的指针,先让两个指针pFast和pSlow同时指向pHead,然后每次使pFast走两步,使pSlow走一步,只要链表带环,那么pFast和pSlow总会相遇。
2、如果带环,环的长度怎么计算:
我们可以得到pFast和pSlow的第一次相遇点,把它标记起来,给一个计数器count,让它初始为1,然后让临时指针pCur向后走,每走一次count+1,等到它们再次相
aa9a
遇的时候,得到的count就是环的长度。
3、如果带环,怎么求环的入口:
得到第一次相遇点pMeetNode后 ,分别在表头和相遇点放一个指针,两个指针每次都向后走一步,下一次相遇的点就是环的入口点。
如果单链表带环,那么从链表头开始时遍历就会进入死循环。可以用两个速度不同的指针,先让两个指针pFast和pSlow同时指向pHead,然后每次使pFast走两步,使pSlow走一步,只要链表带环,那么pFast和pSlow总会相遇。
// 判断链表是否带环,若带环给出相遇点 PNode HasCircle(PNode pHead) { PNode pFast = NULL; PNode pSlow = NULL; if(pHead == NULL) return NULL; pFast = pHead; pSlow = pHead; while(pFast && pFast->_pNext) { pFast = pFast->_pNext->_pNext; pSlow = pSlow->_pNext; if(pFast == pSlow) return pFast; } return NULL; }
2、如果带环,环的长度怎么计算:
我们可以得到pFast和pSlow的第一次相遇点,把它标记起来,给一个计数器count,让它初始为1,然后让临时指针pCur向后走,每走一次count+1,等到它们再次相
aa9a
遇的时候,得到的count就是环的长度。
// 求环的长度 size_t GetCircleLen(PNode pMeetNode) { size_t count = 1; PNode pCurNode = NULL; if(pMeetNode == NULL) return 0; pCurNode = pMeetNode->_pNext; while(pCurNode != pMeetNode) { pCurNode = pCurNode->_pNext; count++; } return count; }
3、如果带环,怎么求环的入口:
得到第一次相遇点pMeetNode后 ,分别在表头和相遇点放一个指针,两个指针每次都向后走一步,下一次相遇的点就是环的入口点。
// 求环的入口点 PNode GetEnterNode(PNode pHead, PNode pMeetNode) { if(pHead == NULL || pMeetNode == NULL) return NULL; while(pHead != pMeetNode) { pHead = pHead->_pNext; pMeetNode = pMeetNode->_pNext; } return pHead; }
相关文章推荐
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 65. 链表是否带环、环入口、环长度、链表相交问题分析与总结
- 链表面试题----判断一个单链表是否带环,若带环,求入口点和环的长度
- 剑指offer面试题-判断链表是否带环并求环的入口点和环的长度
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?求环的入口点?
- 判断链表是否带环,若带环求环的长度,若带环求环的入口点
- 链表带环问题求解?是否带环,环的入口点,环长度
- 剑指offer--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 链表面试题之判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 链表--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- -判断链表是否带环?若带环求环的长度?若带环求环的入口点
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 剑指offer 15---判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 判断两个不带环链表是否相交?若相交,求入口点。
- 合并链表,判断链表是否有环、是否相交,相交的第一个节点,进入环的第一个节点,O(1)时间复杂度删除某节点
- 【链表】判断链表是否有环,环的长度,环的入口点
- 判断链表是否带环,以及环的入口