剑指offer(52)-链表中环的入口结点
来源:互联网 发布:广电网络网上营业厅 编辑:程序博客网 时间:2024/06/02 22:47
题目描述
一个链表中包含环,请找出该链表的环的入口结点。
代码
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: //找到一快一慢两个指针相遇的结点,两个指针相遇的结点一定在环中。 ListNode* MeetingNode(ListNode* pHead) { if (pHead == NULL) { return NULL; } ListNode *pSlow = pHead ->next; if (pSlow == NULL) { return NULL; } ListNode *pFast = pHead->next->next; while (pFast != NULL && pSlow != NULL) { if (pFast == pSlow) { return pFast; } pSlow = pSlow ->next; pFast = pFast ->next; if (pFast != NULL) { pFast = pFast ->next; } } return NULL; } // 在找到环中任意一个结点之后,就能得出环中的结点数目,并找到环中的入口结点。 ListNode* EntryNodeOfLoop(ListNode* pHead) { ListNode *meetingNode = MeetingNode(pHead); if (meetingNode == NULL) { return NULL; } // get the number of nodes in loop int nodesInLoop = 1; ListNode *pNode1 = meetingNode; while (pNode1->next != meetingNode) { pNode1 = pNode1 ->next; nodesInLoop++; } // move pNode1 pNode1 = pHead; for (int i = 0; i < nodesInLoop; i++) { pNode1 = pNode1 ->next; } // move pNode1 and pNode2 ListNode *pNode2 = pHead; while (pNode1 != pNode2) { pNode1 = pNode1 ->next; pNode2 = pNode2 ->next; } return pNode1; }};
0 0
- 剑指offer(52)-链表中环的入口结点
- 剑指offer--链表中环的入口结点
- 《剑指offer》链表中环的入口结点
- 剑指offer—链表中环的入口结点
- 剑指offer:链表中环的入口结点
- [剑指offer]链表中环的入口结点
- 剑指Offer--056-链表中环的入口结点
- 剑指Offer: 链表中环的入口结点
- 剑指offer-链表中环的入口结点
- 《剑指offer》-链表中环的入口结点
- 剑指Offer 56 链表中环的入口结点
- 剑指offer 链表中环的入口结点
- 剑指offer-55.链表中环的入口结点
- 【剑指offer】链表中环的入口结点
- 【剑指offer】链表中环的入口结点
- 剑指offer-链表中环的入口结点
- 剑指Offer:链表中环的入口结点
- 剑指offer:链表中环的入口结点
- 性能优化中CPU、内存、磁盘IO、网络性能的依赖
- wampserver 集成环境 上传文件$_FILES 返回 empty
- SCU2016-04 B题 枚举+ bfs最短路
- 神奇的快速幂
- bolts-android
- 剑指offer(52)-链表中环的入口结点
- va_list使用及原理
- IOS中导入OpenCV
- c++ primer plus 学习第一天--第二章
- 在Robot FrameWork中引用自定义关键字的过程
- 走遍世界 —— 爱尔兰
- android简易画图板与五子棋
- Java-1.5新特性之泛型
- BZOJ3720: Gty的妹子树