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

链表中环的入口结点

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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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