leetcode142 环形链表II

题目

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

示例

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

解析

和环形链表基础版一样,先是用快慢指针找到相遇的位置,再从此位置开始,slow还是每步走1,head从头节点开始也每步走1,再次相遇的位置就是入口(还是,想不明白就画图)

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func detectCycle(head *ListNode) *ListNode {
     slow := head
     fast := head 
     for fast != nil && fast.Next != nil {
         slow = slow.Next
         fast = fast.Next.Next
         if slow == fast {
             for slow != head {
                 slow = slow.Next
                 head = head.Next
             }
             return slow
         }
     }
     return nil
}

你可能感兴趣的:(#,leetcode链表系列,链表,数据结构)