`

Linked List Cycle II

阅读更多
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?


判断一个链表中是否有环存在,并且输出环的起始点。我们用快慢指针fast,slow来判断是否有环存在,如果它们可以相遇就说明有环存在,如果不能相遇说明没有环存在。它们相遇之后,图中的meet点是它们的相遇点,假设join为环的起始点,我们假设head到join的距离为a, join到meet的距离为b(逆时针),meet到join的距离为c(逆时针)。如果它们相遇,那么fast走过的路程是slow走过的两倍,所以a + b + c + b = 2 ( a + b),即a = c。有了这个关系我们只需要用两个指针一个从相遇点出发,另一个从头结点出发,它们相遇的点就是环的起始点。代码如下:
/**
 * 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 fast = head;
        ListNode slow = head;
        while(fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if(slow == fast) 
                break;
        }
        if(fast != slow) return null;
        fast = head;
        while(fast != slow) {
            fast = fast.next;
            slow = slow.next;
        }
        return fast;
    }
}
  • 大小: 7.9 KB
0
0
分享到:
评论

相关推荐

    python-leetcode题解之142-Linked-List-Cycle-II

    Linked List Cycle II”时,我们面临的是一个关于链表操作的典型问题。这个问题要求编写一个程序来寻找一个单向链表的环的起点,如果链表没有环,则返回NULL。为了解决这个问题,我们通常会利用“快慢指针”(也...

    算法面试通关40讲完整课件 05-07 数组、链表

    4. 链表环检测 II(Linked List Cycle II, 如LeetCode的第142题):找到链表环内的起点。 5. K 个一组翻转链表(Reverse Nodes in K-Group, 如LeetCode的第25题):将链表中的节点每K个一组进行反转。 解决这些题目...

    leetcode中文版-LeetCode:力码

    List LeetCode 92.Reverse Linked List II LeetCode 138.Copy List with Random Pointer LeetCode 142.Linked List Cycle II(solve1) LeetCode 142.Linked List Cycle II(solve2) LeetCode 160.Intersection of Two ...

    leetcode-链表笔记

    Linked List Cycle II**:找到链表环的长度,并给出进入环的第一个节点。 4. **解决链表问题的策略** - **迭代法**:使用循环遍历链表,通常适用于大多数链表操作。 - **递归法**:对于某些特定问题,如链表反转...

    1、基础算法必练题(含解法)).pdf

    15. **Linked List Cycle II**:找到链表中的环的起始节点。通过修改快慢指针的速度,可以确保它们在环内相遇并能确定环的起点。 16. **Reverse Linked List**:反转链表。可以使用迭代或递归的方式,改变节点间的...

    javalruleetcode-leetcode-java:力码笔记

    java lru leetcode leetcode-java leetcode刷题笔记 已做题目列表 1.Two Sum 3.Longest Substring Without Repeating Characters 5.Longest ...II ...141.Linked List Cycle 142.Linked List Cycle II ...II

    lrucacheleetcode-LeetCode:LeetCode刷题

    II(Linked List Cycle II) 2018.9.26 删除排序链表中的重复元素 II(Remove Duplicates from Sorted List II) 2018.9.27 重建二叉树(Rebuild Binary Tree) 2018.9.28 把字符串转换成整数(Convert a string to ...

    小象学院2020 刷题班 3.2-4.171

    6. **环形链表**(Linked List Cycle II) - 知识点:链表,快慢指针法(Floyd判圈法) - 解题方法:设置两个指针,一个速度慢,每次移动一步,一个速度快,每次移动两步。如果链表存在环,它们会在环内相遇。 7....

    python-leetcode题解之141-Linked-List-Cycle

    在解决“Python LeetCode题解之141-Linked-List-Cycle”这一问题时,我们首先需要了解链表的基本概念,包括单向链表和循环链表的定义及其特点。单向链表是一种由一系列节点组成的线性数据结构,每个节点都包含数据...

    LeetCode最全代码

    * [Linked List](https://github.com/kamyu104/LeetCode#linked-list) * [Stack](https://github.com/kamyu104/LeetCode#stack) * [Queue](https://github.com/kamyu104/LeetCode#queue) * [Heap]...

    js-leetcode题解之142-linked-list-cycle-ii.js

    环形链表II”问题涉及到对链表操作的理解,特别是检测链表中是否存在环,并找出环的起始位置。这个问题是链表问题中的一个经典问题,经常作为面试题出现,考察应聘者对数据结构和算法的理解及实现能力。 首先,我们...

    leetcode中国-leetcode:刷算法了

    II 快慢指针再加个初始指针 慢指针到链表开始位置时, 快指针总是比他快k步(每次移动快1步, 移动k次), 第一次相遇的时候快慢指针位置距离链表起始位置差k步即在n-k的位置(链表环长度为n) Majority Element 多数投票...

    前端大厂最新面试题-linked-list.docx

    8. 链表的环形检测(Detect Cycle in Linked List) 链表的环形检测是检测链表中是否存在环形结构。这种操作可以用于解决一些特殊的问题,例如,检测链表中的环形结构以避免死循环。 知识点:链表的环形检测的算法...

    leetcode答案-code_challenges:代码挑战

    leetcode 答案Leet Code 挑战 这是我提交给 Lambda School CS Unit 2 构建周的已接受 ...如果您想自己尝试,这些链接将带您进入代码挑战。...要查看我接受的答案,只需转到与...[Linked List Cycle II](https://leetcode.co

    js-leetcode题解之141-linked-list-cycle.js

    在JavaScript中解决LeetCode上的141号问题“环形链表”,是一种常见的算法练习题,旨在检测程序员对数据结构特别是链表的理解程度以及编程能力。这一题的核心在于判断给定的链表是否有环,并返回布尔值。...

    leetcode答案-leetcode-java:leetcode的Java代码

    leetcode 答案leetcode-java ...的 Java ...II Remove Duplicates from Sorted List com.leetcode.string Single Number com.leetcode.tree Balanced Binary Tree Maximum Depth of Binary Tree Same Tree

    leetcode不会-Leetcode-Java:Leetcode-Java

    Linked List Linked List Cycle Given a linked list, determine if it has a cycle in it. public static boolean hasCycle(ListNode head) 快慢指针法,块指针从head.next开始,慢指针从head开始,快指针每次移动...

    leetcode2sumc-LeetCode:LeetCode的一些题目

    leetcode 2 sum c LeetCode 帮助文档 ...Cycle 160 Easy Intersection of Two Linked Lists 203 Easy Remove Linked List Elements no 206 Easy Reverse Linked List 234 Easy Palindrome Linked List

Global site tag (gtag.js) - Google Analytics