静态网站 站内搜索,茅台酒网站建设方案,网站建设nayuwang,南阳网站seo推广公司题目
给定一个链表的头节点 head #xff0c;返回链表开始入环的第一个节点。 如果链表无环#xff0c;则返回 null。
如果链表中有某个节点#xff0c;可以通过连续跟踪 next 指针再次到达#xff0c;则链表中存在环。 为了表示给定链表中的环#xff0c;评测系统内部…题目
给定一个链表的头节点 head 返回链表开始入环的第一个节点。 如果链表无环则返回 null。
如果链表中有某个节点可以通过连续跟踪 next 指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数 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解释链表中没有环。
题解
/*** 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) {//设环外的部分为a,环入口到相遇点正向为b,环长为bc//fast:abn(bc) slow:ab 2(ab)abn(bc) ac(n-1)(bc)//slow按照环的方向走到入口与head走到入口的距离相等//slow一定在第一圈内与fast相遇 //如果slow刚进入环slow与fast相差N步则一共执行fast两步slow一步的循环N次//也就是slow走了N步而N小于环长ListNode fast head;ListNode slow head;while (fast ! null fast.next ! null) {slow slow.next;fast fast.next.next;if (slow fast) {while (head ! slow) {slow slow.next;head head.next;}return slow;}}return null;}
}