题解 | #链表中环的入口结点#

链表中环的入口结点

https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

package main

func EntryNodeOfLoop(pHead *ListNode) *ListNode{
    if pHead == nil || pHead.Next == nil{
        return nil
    }

    slow,fast := pHead, pHead
    hasCycle :=false

    for fast != nil && fast.Next != nil {
        slow = slow.Next
        fast = fast.Next.Next

        if slow == fast {
            hasCycle = true
            break
        }
    }
    if hasCycle{
        slow = pHead
        for slow !=fast{
            slow = slow.Next
            fast = fast.Next
        }
        return slow
    }else {
        return nil
    }
}

函数被命名为 EntryNodeOfLoop,它接收一个指向链表头部的指针 pHead 并返回环的入口节点(如果存在)。如果链表中没有环,则返回 nil

在这个实现中,我们使用了快慢指针来检测链表中是否存在环。如果存在环,我们会找到快慢指针相遇的节点,然后把其中一个指针(例如 slow)重新指向链表的头部。接着,我们以相同的速度移动两个指针,直到它们再次相遇,这个相遇点就是环的入口。如果链表中没有环,函数将返回 nil

全部评论

相关推荐

02-23 00:10
湖南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务