当前位置: 首页 > news >正文

推荐聊城做网站索牛网站建设

推荐聊城做网站,索牛网站建设,建材网站制作,杭州vi设计价格题目链接 Leetcode.剑指 Offer II 022 链表中环的入口节点 mid 题目描述 给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。 为了表示给定链表中的环&#…

题目链接

Leetcode.剑指 Offer II 022 链表中环的入口节点 mid

题目描述

给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null

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

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

示例 1:

在这里插入图片描述

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

示例 2:

在这里插入图片描述

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

示例 3:

在这里插入图片描述

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

提示:

  • 链表中节点的数目范围在范围 [0,1040, 10^40,104] 内
  • −105<=Node.val<=105-10^5 <= Node.val <= 10^5105<=Node.val<=105
  • pos的值为 -1或者链表中的一个有效索引

分析:快慢指针

我们用两个指针 fastslow,初始都指向 headfast每次走两步,slow每次走一步。

如果链表存在环,那么 fastslow一定会在环中相遇。

在这里插入图片描述

因为fastslow要快1步,所以当 slow走过的距离为 x + y到达相遇点时,fast其实已经在环里转了若干圈了(这里假设是 n圈)。

所以 fast走过的路程为 ,x+n∗(y+z)+yx + n * (y + z) + yx+n(y+z)+y

又因为 fast走过的路程 应该是 两倍slow走过的路程,即 x+n∗(y+z)+y=2∗(x+y)x + n * (y + z) + y = 2 * (x + y)x+n(y+z)+y=2(x+y)

化简得 : x=(n−1)∗(y+z)+zx = (n - 1) * (y + z) + zx=(n1)(y+z)+z,即从相遇点走 z的路程,再走若干圈,就是 x的路程。(我们只需要走 0 圈即可),即 x=zx = zx=z

fastslow相遇时,让 fast重新指向头节点 headfastslow同时移动,当他们再次相遇时的点,就是环的起点。

时间复杂度: O(n)O(n)O(n)

C++代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {if(head == nullptr) return nullptr;ListNode *fast = head , *slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;//两者相遇if(slow == fast){fast = head;while(slow != fast){slow = slow->next;fast = fast->next;}return slow;}}return nullptr;}
};

Java代码:

/*** 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) {if(head == null) return null;ListNode fast = head;ListNode slow = head;//fast 或 fast.next 为 null , 说明链表没有环while(fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;//快慢指针相遇了,fast 重新回到头节点 head,快慢指针再同时移动if(slow == fast){fast = head;while(fast != slow){fast = fast.next;slow = slow.next;}return fast;}}return null;}
}
http://www.yayakq.cn/news/962652/

相关文章:

  • 网站开发好学嘛西凤酒网站建设的基本情况
  • 自己做的网站怎么放上网怎么做网站的后台管理系统
  • 网站403错误网络优化案例分析
  • 网站怎么优化那些做环保网站的好处
  • 东莞网站设计讯息洛可可设计公司薪资
  • 做网站分辨率修改黄山学院教务管理系统
  • 网站设计开发是啥php网站建设基本流程
  • 12306网站开发商小程序源码模板下载
  • 全flash网站欣赏wordpress设置支付宝
  • 建个人网站怎么赚钱吗一个域名能同时做2个网站吗
  • 城乡建设厅建设网站关键词诊断优化全部关键词
  • 国内网站服务器中国水土保持生态建设网站
  • 一般电商都是在哪些网站上做太原免费建站
  • 网页网站建设的步骤流程广西做网站公司有哪些
  • 电子项目外包网站八戒网站做推广
  • 小米商城的网站建站海洋优质的网站建设
  • 湖南专业做网站公司宁海企业网站建设
  • 检察院门户网站建设报告app开发公司的管理机制
  • 做网站签到挣钱吗衡阳房产网站建设
  • 免费做网站公司网站建设制作苏州
  • 阿里云网站建设服务费会计科目网站推广活动策划
  • 网站搭建空间服务网站备案
  • 沈阳网站设计公司网站开发任务完成情况
  • apache添加网站软件行业发展趋势
  • 侨联网站建设wordpress页脚菜单横排
  • 宁化网站建设网络推广方案写作七步法
  • 互展科技网站建设网站建设服务宗旨
  • 网站一键生成app关于网站建设的总结
  • 网站建设和制作建设一个旅游网站毕业设计
  • 快速将网站seo功能型网站有哪些