首页 > 其他分享 >环形链表 II

环形链表 II

时间:2023-06-15 14:36:31浏览次数:42  
标签:II head slow 环形 fast next 链表 null


环形链表 II

题目: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。

说明:不允许修改给定的链表。

解题思路: 还是运用快慢指针, 不过这次在两指针相遇后应将fast重置为head再走一次链表直到快慢指针相遇, 具体原理请阅读Krahets大佬的题解

public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode fast = head, slow = head;
        while(fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;

            if(fast == slow) {
                break;
            }
        }

        if(fast == null || fast.next == null) return null;

        fast = head;
        while(fast != slow) {
            fast = fast.next;
            slow = slow.next;
        }

        return slow;
    }
}


标签:II,head,slow,环形,fast,next,链表,null
From: https://blog.51cto.com/u_14813899/6487210

相关文章

  • 相交链表
    相交链表题目:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点c1开始相交。示例1:输入:intersectVal=8,listA=[4,1,8,4,5],listB=[5,0,1,8,4,5],skipA=2,skipB=3输出:Referenceofthenodewithvalue=8输入解释:相交节点的值为8(注意,如果......
  • 链表划分
    链表划分题目:描述给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例样例1:输入:list=nullx=0输出:null解释:空链表本身满足要求样例2:输入:list=1->4->3->2->5->2->nullx=3输出:1->2-......
  • 会议室 II
    会议室II题目:描述给定一系列的会议时间间隔intervals,包括起始和结束时间[[s1,e1],[s2,e2],…](si<ei),找到所需的最小的会议室数量。样例1输入:intervals=[(0,30),(5,10),(15,20)]输出:2解释:需要两个会议室会议室1:(0,30)会议室2:(5,10),(15,20)样例2输入:inter......
  • PPT| XX华MES整合IIOT技术提升企业数字化智造(可下载))
    PPT总共有50页,受篇幅有限,有需要PPT的同学可以关注:智能制造数字化咨询PPT总共有50页,受篇幅有限,有需要PPT的同学可以关注:智能制造数字化咨询......
  • SK-II受核污染疑云解除,关键时刻物联网技术保障消费者健康安全
    SK-II近日就“神仙水”被指受到产地滋贺县核辐射污水影响作出回应。SK-II称,相关报道属于不实信息,目前源头新闻发布者已经删除相关消息。滋贺县政府此前已于2015年3月发布过相关声明,表示当地并未受到核辐射影响。SK-II同时表示,旗下所有产品和成分上市之前均经过安全性评估,遵守所在市......
  • 链表
    数组的内存空间是连续的,链表是不连续的链表分为单端链表和双端链表访问O(N)搜索O(N)插入O(1)删除O(1)写很快但是读很慢常用操作:1.创建链表2.添加元素3.访问元素4.查找元素5.删除元素6.链表的长度203给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.......
  • [C语言/PTA] 学生成绩链表处理
    题目要求本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。函数接口定义:structstud_node*createlist();structstud_node*deletelist(structstud_node*head,intmin_score);函数createlist利用scanf从输入......
  • [C语言/PTA] 单链表结点删除
    题目要求本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:structListNode{intdata;ListNode*next;};函数接口定义:structListNode*readlist();structListNode*deletem(structListNode*L,intm);......
  • [C语言/PTA] 建立学生信息链表
    题目要求本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。函数接口定义:voidinput();该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下:structstud_node{intnum;/*学号*/charnam......
  • 数据结构和算法——旋转打印链表
    1、问题描述输入参数nn为正整数,如输入n=5n=5,则按行打印如下的数字:2、问题的理解这个问题是将数字1…n21…n2按照一圈一圈的方式......