题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
首先想到的是快慢指针,但是用快慢指针判断环入口的原理没理解,感觉有点麻烦。然后读题“找出链表的环入口”,这个节点进环的时候要经过一次,出环必定还要经过一次,这不正好可以利用哈希表防止重复的原理吗?代码也很清爽------
// -*- 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 is None: //首先判断链表是否为空,若为空就返回None
return None
hash_map = {}
p1 = pHead //初始化一个指针p1
while p1:
if p1.val not in hash_map://判断p1所指节点的值是否存在于hash_map中
hash_map[p1.val]= p1.val //若不存在,记录下该节点的值
p1 = p1.next //并将指针移向下一个节点
else:
return p1 //若已存在于hash_map中,表明已经绕环一圈,直接返回即可
return None
京公网安备 11010502036488号