分享

BAT算法面试题(12)--环形链表(哈希表法)

 长沙7喜 2018-08-25

一.面试题目

给定一个链表,判断链表中是否有环.
难度升级: 试试能否在不使用额外空间解决此问题?

二.解决方案(哈希表)

思路

    我们可以通过检查一个结点此前是否被访问过来判断链表是否为环形链表.常用方法,一般是使用哈希表.

算法

    我们遍历所有的节点并在哈希表中存储每个结点的引用(或内存地址).如果当前节点为空结点null,表示我们已经检测到链表的末尾的下一个节点.那么表示我们已经完成了链表的遍历,并且此链表不是环形链表.如果当前结点的引用已经存在过哈希表中,那么即可立马返回true(表示此链表为环形链表).

三.代码

Java Code



四.复杂度分析

  • 时间复杂度: O(n),对于含有n个元素的链表,我们访问每个元素最多一次.添加一个结点到哈希表中只需要花费O(1)的时间.

  • 空间复杂度:O(n),空间取决于添加哈希表中的元素数目.最多可以添加n个元素.

五.学习建议

  • 只要明白哈希表,即可解决这个问题.!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多