一个链表中包含环,请找出该链表的环的入口结点。
来源:互联网 发布:网络火词2016 编辑:程序博客网 时间:2024/06/05 17:53
思路:1.通过两个指针,一个一次走一个节点,一个走两个,如果快的追上慢的,则说明有环
2.且,追上处的节点为环中的一个节点,从该节点一次走一步计数,当回到原地,可知环的节点数
3.两个指针都从链表头开始走,一个先走环的节点数;然后两个同时走,当两个相遇时,相遇节点为环的入口节点
/*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 = pSlow->next; while(pFast != NULL && pSlow != NULL){ if(pFast==pSlow) return pFast; pSlow = pSlow->next; pFast = pFast->next; if(pFast==pSlow) return pFast; if(pFast != NULL) pFast = pFast ->next; } return NULL; } ListNode* EntryNodeOfLoop(ListNode* pHead) { ListNode* meetingNode = MeetingNode(pHead);//通过快追上慢的方法找到环中的任意一个node if(meetingNode == NULL) return NULL; //得到环中节点的数目 int nodesInLoop = 1; ListNode* pNode1 = meetingNode; while(pNode1->next != meetingNode){ pNode1 = pNode1->next; ++nodesInLoop; } //先移动pNode1,次数为环中节点的数目 pNode1 = pHead; for(int i = 0; i < nodesInLoop;++i) pNode1 = pNode1->next; //再同时移动pNode1和品Node2 ListNode* pNode2 = pHead; while(pNode1 != pNode2){ pNode1 = pNode1->next; pNode2 = pNode2->next; } return pNode1; }};
阅读全文
0 0
- 一个链表中包含环,请找出该链表的环的入口结点。
- 一个链表中包含环,请找出该链表的环的入口结点
- 一个链表中包含环,请找出该链表的环的入口结点
- 一个链表中包含环,请找出该链表的环的入口结点。
- java面试题(剑指Offer):找出该链表的环的入口结点
- 链表的环的入口结点
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 环的入口结点检测
- 求环的入口结点
- 如何判断一个链表是否有环,如果有环,并找出环的入口
- 首先如何判断一个链表是否有环,并找出环的入口
- 判断一个链表是否有环,并找出环的入口
- 链表------带环链表的环入口结点
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- Hibernate 使用
- [NOIP2017模拟]Fantasy Strange Tree
- WebSerVerXML解析
- 集合List中的批量删除
- 自动行为操控Steering(六)—逃避(与拦截方向相反,单体操控)
- 一个链表中包含环,请找出该链表的环的入口结点。
- 广东柏文带你走进化妆品OEM的“望闻问切”
- 性能测试常见用语
- 安卓图片反复压缩后为什么会普遍会变绿?
- 普适性的视觉感知与运动感知
- poj2983&&poj1364
- Android6.0 权限后编辑头像功能
- 【云隐课堂】【软件安装】Source_Insight3.5安装步骤
- 如何系统的学习 Unity 3D 中的 shader 编写(nvidia cg 编程)?