给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
第一种方法,存储出现过的节点:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def EntryNoneOfLoop(self, pHead):
tempList = []
p = pHead
while p:
if p in tempList:
return p
else:
tempList.append(p)
p = p.next
第二种方法,快慢指针。
def EntryNodeOfLoop(self, pHead):
if pHead == None or pHead.next == None or pHead.next.next == None:
return None
pfast = pHead.next.next
pslow = pHead.next #这里就要让fast和slow不同
while pfast != pslow:
if pfast.next == None or pfast.next.next == None:
return None
pfast = pfast.next.next
pslow = pslow.next
pfast = pHead #让快指针回到头节点
while pfast != pslow:
pfast = pfast.next
pslow = pslow.next
return pfast