美文网首页剑指offer- python实现
面试题23:链表中环的入口节点

面试题23:链表中环的入口节点

作者: 不会编程的程序猿甲 | 来源:发表于2020-03-08 22:41 被阅读0次

    题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

    解题思路:这道题需要分步骤完成,首先需要通过快慢两个指针判断是否有环;接着如果有环从两个指针相遇的节点开始一边向前一遍计数,得到环的节点数n,最后通过一个指针先行n步再两个指针同时前进的方法确定环的入口。思维导图如下:


    23 链表中环的入口节点.png

    代码实现:

    # -*- coding:utf-8 -*-
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    class Solution:
        def EntryNodeOfLoop(self, pHead):
            meeting = self.MeetingNode(pHead)
            if meeting == None:
                return None
            pNode1 = pHead
            NodeNumber = 1
            while(pNode1.next != meeting):
                pNode1 = pNode1.next
                NodeNumber +=1
            #先移动n步
            pNode1 = pHead
            for i in range(NodeNumber):
                pNode1 = pNode1.next
            #同时移动两个指针
            pNode2 = pHead
            while(pNode1 != pNode2):
                pNode1 = pNode1.next
                pNode2 = pNode2.next
            return pNode1
    
        def MeetingNode(self, pHead):
            # write code here
            if pHead is None:
                return None
            fast = pHead
            slow = pHead
            while fast is not None and fast.next is not None:
                fast = fast.next.next
                slow = slow.next
                if fast == slow:
                    return slow
            return None
    

    提交结果:

    牛客网提交结果.png

    相关文章

      网友评论

        本文标题:面试题23:链表中环的入口节点

        本文链接:https://www.haomeiwen.com/subject/pvkjdhtx.html