連結串列環的入口節點
阿新 • • 發佈:2018-12-09
題目描述 給一個連結串列,若其中包含環,請找出該連結串列的環的入口結點,否則,輸出null。 思路: 如圖.1所示,先讓指標先走,然後指標走,其中,的步伐分別是1和2,那麼相對於每次都走快一步,所有如果有環,則一定有的時候,假設在點相遇,則走過的路程,與走過的路程滿足如下關係:
其中,代表環中節點的個數,代表走了幾次完整的環,即比多走的路徑,實際上,由公式(1)知,無論取值多少,相遇點都在,即可以看成
# -*- 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
p1,p2=pHead,pHead
while True:
p1=p1.next
if p2.next==None:
return None
p2=p2.next.next
if p1==None or p2==None:
return None
if p1==p2:
break
p2=pHead
if p1==p2:
return p1
while True:
p1=p1.next
p2=p2.next
if p1==p2:
return p1