剑指offer_链表---链表中环的入口结点

简介: 剑指offer_链表---链表中环的入口结点

##题目描述

一个链表中包含环,请找出该链表的环的入口结点。

##解题思路

1,使用快慢指针找到碰撞点

2,两个同速指针分别从头节点和碰撞点出发,相遇的地方就是入口节点

##代码实现

/**
 * 
 */
package 链表;
/**
 * <p>
 * Title:EntryNodeOfLoop
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月23日 上午9:25:08
 */
public class EntryNodeOfLoop {
  public ListNode NodeEntryNodeOfLoop(ListNode pHead) {
    if (pHead == null) {
      return null;
    }
    // 先找到碰撞点,两个指针出发,一快一慢
    ListNode fast = pHead;
    ListNode slow = pHead;
    if (fast == null || fast.next == null) {
      return null;     //因为下边的循环要用到fast.next,所以不能为null
    }
    while (fast != null) {   //因为函数体里没有用到fast.next做判断,只有赋值操作,所以不需要对其做非空判断。
      fast = fast.next.next;
      slow = slow.next;//slow的速度比fast慢,所以不用判断slow是否非空
      if (fast == slow)
        break;
    }
    // 速度一样的两个指针一个从pHead出发,一个从碰撞点出发,相遇的地方就是入口节点
    slow = pHead;
    while (slow != fast) {
      slow = slow.next;
      fast = fast.next;
    }
    return slow;
  }
}


相关文章
|
4月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
93 1
|
5月前
链表的中间结点
链表的中间结点
193 57
|
3月前
|
存储 算法 搜索推荐
链表的中间结点
【10月更文挑战第24天】链表的中间结点是链表操作中的一个重要概念,通过快慢指针法等方法可以高效地找到它。中间结点在数据分割、平衡检测、算法应用等方面都有着重要的意义。在实际编程中,理解和掌握寻找中间结点的方法对于解决链表相关问题具有重要价值。
33 1
|
4月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
66 0
|
4月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
25 0
|
9月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
8月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
8月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
8月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
76 2
|
9月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
92 1