美文网首页
142.求环形链表的环节点(环形链表 II)

142.求环形链表的环节点(环形链表 II)

作者: 雨生_ | 来源:发表于2019-04-15 17:45 被阅读0次

Title: Linked List Cycle II

Description:

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

To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.

Note: Do not modify the linked list.

Example:

nput: head = [3,2,0,-4], pos = 1
Output: tail connects to node index 1
Explanation: There is a cycle in the linked list, where tail connects to the second node.

Difficulty:

Medium

Implement Programming Language:

Go

Follow up:

Can you solve it without using extra space?

Answer:

题目最后标注了,可否考虑不适用额外的内存空间,所以我理解的实现就是希望用快慢指针了,虽然耗子叔说不喜欢这个解法,但是我还是写一下吧,哈哈。

首先快慢指针确定是否有环,这个没太多问题。最主要的是确定有环之后,如何找到对应的环开始点,这里有一个小的数学推导,share一下。


image.png

如图所示,相遇节点上面,慢指针走了a+b,快指针走了2(a+b), 所以如果按照1步的速度,再走a+b步一定可以到碰撞节点,有一半的地方是b,所以未画出来的部分就是a了,所以再拿一个指针,走a步,正好能跟另一个指针碰在一起,在交环的地方。

代码:

func detectCycle(head *ListNode) *ListNode {
    slow,fast := head,head
    hasCycle := false
    for slow != nil && fast != nil && fast.Next != nil{
        fast = fast.Next.Next
        slow = slow.Next
        if fast == slow{
            hasCycle = true
            break
        }
    }
    if !hasCycle{
        return nil
    }

    slow = head

    for fast != slow{
        fast,slow = fast.Next,slow.Next
    }
    return slow
}

相关文章

  • LeetCode 142. 环形链表 II(Linked Lis

    142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示...

  • 142. 环形链表 II

    142. 环形链表 II 问题 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为...

  • 142. 环形链表 II

    题目链接: 142. 环形链表 II 题目描述: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返...

  • 【LeetCode】142.环形链表II

    题目描述 142.环形链表 II 给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回 null。为了...

  • LeetCode 142. 环形链表 II

    142. 环形链表 II 给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链...

  • 双指针

    一、双指针总结 1.1题目 快慢指针(主要解决链表中的问题) 141.环形链表 142.环形链表 II 876.链...

  • LeetCode 142 环形链表 II Linked List

    有关链表的LeetCode做题笔记合集,Python实现 链表定义 142. 环形链表 II Linked Lis...

  • 获取有环单向列表环入口的结点(双指针法)

    LeetCode 141.环形链表 142.环形链表II 对题目不熟悉的同学,可以先刷下题,结合LeetCode上...

  • TOP100

    142. 环形链表 II[https://leetcode-cn.com/problems/linked-list...

  • LeetCode:142. 环形链表 II

    问题链接 142. 环形链表 II[https://leetcode-cn.com/problems/linked...

网友评论

      本文标题:142.求环形链表的环节点(环形链表 II)

      本文链接:https://www.haomeiwen.com/subject/ezhpwqtx.html