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

链表中环的入口结点

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

全部评论

相关推荐

03-02 08:18
集美大学 Java
钱嘛数字而已:没有赛事奖项么?另外,项目经历字有点多哈,建议突出一下重点:用的什么技术,解决什么问题,达到什么效果。
大家都开始春招面试了吗
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务