python3题解 -快慢指针| #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def EntryNodeOfLoop(self, pHead:ListNode):
# write code here
slow = self.hasCycle(pHead)
if not slow: return None
fast = pHead
while fast !=slow:
slow = slow.next
fast = fast.next
return slow
def hasCycle(self, head):
if not head:return None
fast = head
slow = head
while fast != None and fast.next != None:
fast = fast.next.next
slow = slow.next
if fast == slow:
return slow
return None
# class Solution:
# # 判断有没有环,返回相遇的地方
# def EntryNodeOfLoop(self, pHead: ListNode):
# slow = self.hasCycle(pHead)
# # 没有环
# if slow == None:
# return None
# # 快指针回到表头
# fast = pHead
# # 再次相遇即是环入口
# while fast != slow:
# fast = fast.next
# slow = slow.next
# return slow
# def hasCycle(self, head):
# # 先判断链表为空的情况
# if head == None:
# return None
# # 快慢双指针
# fast = head
# slow = head
# # 如果没环快指针会先到链表尾
# while fast != None and fast.next != None:
# # 快指针移动两步
# fast = fast.next.next
# # 慢指针移动一步
# slow = slow.next
# # 相遇则有环
# if fast == slow:
# # 返回相遇的地方
# return slow
# # 到末尾则没有环
# return None