1. 思路(哈希法)
以后提到哈希法,指的是使用集合set
或者字典dict
- ① 遍历单链表的每个结点
- ② 如果当前结点地址没有出现在set中,则存入set中
- ③ 否则,出现在set中,则当前结点就是环的入口结点
- ④ 整个单链表遍历完,若没出现在set中,则不存在环
2. 代码
tips:注意创建空字典(a = {}
)和创建空集合的区别a = set()
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def EntryNodeOfLoop(self, pHead):
# write code here
cur = pHead
addr_set = set() # 创建一个空的集合
while cur:
if cur not in addr_set:
addr_set.add(cur)
cur = cur.next
elif cur in addr_set:
return cur
else:
return None