leetcode--环形链表.找到入环节点(java)

这篇具有很好参考价值的文章主要介绍了leetcode--环形链表.找到入环节点(java)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环形链表.找到入环节点

LeetCode 142:环形链表II 可以在这里测试

题目描述

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。

示例1:
leetcode--环形链表.找到入环节点(java)

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例2:
leetcode--环形链表.找到入环节点(java)

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例3:
leetcode--环形链表.找到入环节点(java)

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

解题思路

这里用到一个小技巧,快慢指针法:
1.环形链表没有尾结点,会在环里循环,因此,如果能走到null ,就表示无环,
2.有环时,使用快慢指针法,快指针一次走两步,慢指针一次走一步,一定会在环内相遇,
3.相遇后,快指针回到头节点,然后改成每次走一步,慢指针还是走一步。然后就会在入环节点相遇。
4.上面的结论,自己可以试着证明下。

代码如下:

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
    	//环形链表 没有null 节点,如果走到null 说明无环,
        if(head == null || head.next == null || head.next.next == null){
            return null;
        }
        //快的先走两步,慢的走一步
        ListNode fast = head.next.next;
        ListNode slow = head.next;
        //先让快慢指针相遇
        while(fast != slow){
        		//遇到null 说明无环
            if(fast.next == null || fast.next.next == null){
                return null;
            }
            fast = fast.next.next;
            slow = slow.next;
        }

			//快指针回到头节点,开始一次走一步,就会在入环节点相遇
        fast = head;
        while(fast != slow){
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}

创作不易,一键三连文章来源地址https://www.toymoban.com/news/detail-467490.html

到了这里,关于leetcode--环形链表.找到入环节点(java)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode题目详解】24.两两交换链表中的节点19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II day4(补)

      给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 这道题建议使用 虚拟头结点 ,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。 接下来就是

    2024年02月15日
    浏览(40)
  • LeetCode.141,142——环形链表,环形链表Ⅱ

    题目如下: 通过题目中对于环形链表的大体描述,可以知道,环形链表最后一个结点保存了一个地址,用于返回链表中某个结点。并且。这个返回的结点并不是返回图中保存数据的结点。而是返回链表中任意一个结点。即:   或者: 题目中给了两个要求,分别是: 1. 判断链

    2024年02月10日
    浏览(46)
  • 环形链表、环形链表 II、有效的括号​​​​​​​(leetcode)

    目录 一、环形链表 方法(快慢指针): 二、环形链表 II 三、有效的括号 给你一个链表的头节点  head  ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪  next  指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数  pos  来

    2024年02月04日
    浏览(39)
  • 代码随想录【链表】--->删除倒数第N个节点、链表相交、环形链表

    ⭐️ 代码随想录 ⭐️ 数组篇 : 二分查找 移除数组 有序数组的平方 长度最小的数组 螺旋矩阵 链表篇 : 链表移除 设计链表 反转链表 交换链表中的节点 题目LeetCode19. 删除链表的倒数第 N 个结点 这道题的逻辑比较清晰 1. 先找到倒数第n+1个节点 2. 删除倒数第n个节点 为什么要

    2023年04月26日
    浏览(60)
  • day4 两两交换链表中的节点 删除链表的倒数第N个节点 链表相交 环形链表

    - 两两交换链表中的节点     - cur移动的时候,应该后移动俩位,或者说移动到下一操作节点的前一位 - 删除链表的倒数第N个节点      - 因为slow删除元素是要在删除元素的前一位进行删除,所以while ( k--) 移动的fast还不够,还需要再往后移动一位,这样才能让slow指向正确

    2024年02月16日
    浏览(38)
  • day4_24交换链表节点_19删除节点_面链表相交_142环形链表II

    题目链接 方案一:自己的方案 奇偶节点,思路比代码随想录中的更直观一些,但是需要进行分类讨论,设置的辅助节点也多一些。 方案二:代码随想录 直接上图: 需要注意的是要保存1,2,3节点,因为在改变next指针时很容易将链表断开。 题目链接 方案一: 两边扫描,第一

    2024年02月16日
    浏览(44)
  • 链表专题1—24. 两两交换链表中的节点 234.回文链表 143.重排链表 141.环形链表 142.环形链表II 160.链表相交 C++实现

    迭代法,时间复杂度: O ( n ) O(n) O ( n ) , 空间复杂度: O ( 1 ) O(1) O ( 1 ) 时间复杂度、空间复杂度: O ( n ) O(n) O ( n ) 止位置时,慢指针就在链表中间位置。 同时用pre记录慢指针指向节点的前一个节点,用来分割链表,将链表分为前后均等两部分,如果链表长度是奇数,那么

    2024年02月12日
    浏览(43)
  • 环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】

    目录 一、环形链表 方法(快慢指针): 二、环形链表 II 三、有效的括号 给你一个链表的头节点  head  ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪  next  指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数  pos  来

    2024年02月03日
    浏览(40)
  • leetcode--删除链表的倒数第N个节点(java)

    19 删除链表的倒数第N个节点 -可以测试 题目描述: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点 示例1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例2: 输入:head = [1], n = 1 输出:[] 示例3: 输入:head = [1,2], n = 1 输出:[1] 提示: 链表中结点的数目为

    2024年02月07日
    浏览(48)
  • 24. 两两交换链表中的节点&19.删除链表的倒数第N个节点 &160.链表相交&142.环形链表II

    24. 两两交换链表中的节点: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。   19.删除链表的倒数第N个节点  给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包