记录刷题的过程。牛客和力扣中都有相关题目,这里以牛客的题目描述为主。该系列默认采用python语言。
1、问题描述:
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
2、数据结构:
链表
3、题解:
快慢指针
先判断是否有环
然后用慢指针,找环的入口
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def EntryNodeOfLoop(self, pHead):
# write code here
if pHead == None:
return None
#快慢指针,找是否有环
fastp = pHead
slowp = pHead
while fastp and fastp.next:
fastp = fastp.next.next
slowp = slowp.next
if fastp == slowp:
break
#没环
if fastp == None or fastp.next == None:
return None
#否则有环,找环入口
slowp2 = pHead
while slowp != slowp2:
slowp = slowp.next
slowp2 = slowp2.next
return slowp
4、复杂度分析:
时间复杂度:O(N)
空间复杂度:O(1)