链表中环的入口节点

链表中环的入口结点

http://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da16833f79a38e4

题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出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
全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务