资讯专栏INFORMATION COLUMN

142. Linked List CycleII

Developer / 1382人阅读

摘要:题目解答当与相遇的时候,比多了一圈,而也正好走了一圈。但是原来走的是圈外的路,从起点到圈开始的路,所以在实际圈里剩下的路程,其实就是从起点到圈开始的点的距离。

题目:
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Note: Do not modify the linked list.

Follow up:
Can you solve it without using extra space?

解答:

/**
 * 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 || head.next == null) return null;
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            //当slow与fast相遇的时候,fast比slow多了一圈,而slow也正好走了一圈。但是slow原来走的是圈外的路,从起点到圈开始的路,所以在实际圈里剩下的路程,其实就是从起点到圈开始的点的距离。那么我们设一个点slow2开始从起点走,走到slow2和slow相遇的时候,就是圈开始的点了
            if (slow == fast) {
                ListNode slow2 = head;
                while (slow2 != slow) {
                    slow2 = slow2.next;
                    slow = slow.next;
                }
                return slow;
            }
        }
        return null;
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64949.html

相关文章

  • LeetCode 之 JavaScript 解答第142题 —— 环形链表 II(Linked Li

    摘要:说明不允许修改给定的链表。算法思路题目要求返回单链表中存在循环链表的位置。首先,先判断该单链表是否存在循环链表用两个快慢指针分别指向链表的头部,每次移动两步,每次移动一步,移动的步数是的两倍。 Time:2019/4/8Title: Linked List Cycle IIDifficulty: mediumAuthor:小鹿 题目:Linked List Cycle II Giv...

    whidy 评论0 收藏0
  • leetcode141-142. Linked List Cycle I & II

    摘要:题目要求这道题目要求判断一个链表中是否有环,如果有环,就返回环中的第一个节点。如果有环,就会重复遇到这个指向的节点。则该链表有环,且该节点就是环的起始节点。但是这个方法会毁坏原来链表的数据结构。 题目要求 Given a linked list, return the node where the cycle begins. If there is no cycle, return n...

    张巨伟 评论0 收藏0
  • LeetCode 142:环形链表 II Linked List Cycle II

    摘要:如果链表无环,则返回。说明不允许修改给定的链表。示例输入输出解释链表中有一个环,其尾部连接到第一个节点。两种方法哈希表哈希表添加节点时只要发现节点已经存在了,证明就有环形链表。 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该...

    hoohack 评论0 收藏0
  • LeetCode 142:环形链表 II Linked List Cycle II

    摘要:如果链表无环,则返回。说明不允许修改给定的链表。示例输入输出解释链表中有一个环,其尾部连接到第一个节点。两种方法哈希表哈希表添加节点时只要发现节点已经存在了,证明就有环形链表。 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该...

    geekzhou 评论0 收藏0
  • 力扣(LeetCode)142

    摘要:如果链表无环,则返回。为了表示给定链表中的环,我们使用整数来表示链表尾连接到链表中的位置索引从开始。说明不允许修改给定的链表。 题目地址:https://leetcode-cn.com/probl...题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)...

    DevTTL 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<