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

链表中环的入口结点

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

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:

    # 先判断链表是否有环,快慢指针
    def ifLoop(self ,head : ListNode) -> bool:
        if not head:
            return None
        fast=head
        slow=head
        while fast and slow:
            slow=slow.next
            if fast.next:
                fast=fast.next.next
            else:
                return None
            if fast==slow:
                return slow
        return None
    
    # 快慢指针各移动一步,两者重合时的位置,即为环的入口
    def EntryNodeOfLoop(self, pHead:ListNode):
        # write code here
        slow=self.ifLoop(pHead) # slow的位置是判断环表结束时的位置
        if not slow:
            return None
        fast=pHead              # fast 重新定位在头节点
        while fast!=slow:
            fast=fast.next
            slow=slow.next
        return slow

    




全部评论

相关推荐

安全劝退第二人:给我发个
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务