剑指offer面试题56 链表中环的入口节点(java实现)
来源:互联网 发布:清理后台的软件 编辑:程序博客网 时间:2024/05/10 10:03
解题思路:
1.首先找出链表中环内节点个数
2.设置两个指针p1和p2,p1先在链表上向前移动n步,然后两个指针以相同的速度向前移动,当两个指针相遇时,该节点即为环的入口节点。
public class Solution {class ListNode {int value;ListNode next = null;public ListNode(int value) {this.value = value;}}/**用于在环形链表中找到环中节点的数目 * @param pHead */public ListNode MettingNode(ListNode pHead) {if (pHead == null) {return null;}ListNode pSlow = pHead.next;if (pSlow == null) {return null;}//初始情况下,fast比slow块一个身位ListNode pFast = pSlow.next;while (pFast != null && pSlow != null) {if (pFast == pSlow) {return pFast;}pSlow = pSlow.next;pFast = pFast.next;if(pFast != null) {//每次在之前身位的基础上又多块一个身位,这样下去肯定能在环内追上pslow//单纯地只快一个身位是不可能追上的 pFast = pFast.next;}}return null;}public ListNode EntryNodeOfLoop(ListNode pHead) { ListNode mettingNode = MettingNode(pHead); if (mettingNode == null) { return null; } //在链表中存在环的条件下 //获取链表中环内节点的数目 int numberOfLoop = 1; ListNode p = mettingNode.next; while (p != mettingNode) { numberOfLoop++; p = p.next; } //两个指针p1和p2,指针p1先在链表上向前移动n步,然后两个指针以相同的速度向前移动 ListNode p1 = pHead; ListNode p2 = pHead; //先让指针p1在链表上移动n步 int step = 0; while (step < numberOfLoop) { p1 = p1.next; step ++; } //两个指针以相同的速度移动,直到相遇为止则正好是环的入口节点 while (p1 != p2) { p1 = p1.next; p2 = p2.next; } return p1; }}
阅读全文
0 0
- 剑指offer面试题56 链表中环的入口节点(java实现)
- 剑指Offer面试题56:链表中环的入口节点 Java实现
- 《剑指Offer》面试题56:链表中环的入口节点
- 剑指Offer 面试题23:链表中环的入口节点 Java代码实现
- 剑指offer--面试题23:链表中环的入口节点
- 【剑指offer】面试题23:链表中环的入口节点
- 面试题56:链表中环的入口节点
- 剑指offer----链表中环的入口节点----java实现
- 剑指offer----链表中环的入口节点----java实现
- 剑指offer----链表中环的入口节点----java实现
- 【剑指Offer学习】【面试题56:链表中环的入口结点】
- 剑指offer-面试题56:链表中环的入口结点
- 剑指offer--面试题56:链表中环的入口结点
- 剑指offer-面试题56-链表中环的入口结点
- 剑指offer 面试题56 链表中环的入口结点
- 【剑指Offer】面试题56:链表中环的入口结点
- [剑指offer]面试题56:链表中环的入口结点
- 剑指offer面试题58 二叉树的下一个节点(Java实现)
- 【每日一题】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、 Min(返回最小值的操作)的时间复杂度为O(1)
- 数数
- 欢迎使用CSDN-markdown编辑器
- Mybatis(二)— 使用Mapper动态代理方式进行开发
- cache浅析
- 剑指offer面试题56 链表中环的入口节点(java实现)
- Qt On Android + protobuf3的使用
- session机制解析
- JUC原子类-03之 AtomicLongArray原子类
- CSS_导航栏+固定浮动的回到顶部按钮
- VS环境下实现一个简单的三子棋游戏
- 嵌入式学习网站推荐
- ajax获取servlet发送的数据
- ubuntu下将本地项目上传到github托管