当前位置: 首页 > 面试题库 >

请问如何判断一个单向链表存在回路?

芮叶秋
2023-03-14
本文向大家介绍请问如何判断一个单向链表存在回路?相关面试题,主要包含被问及请问如何判断一个单向链表存在回路?时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

方法1:用一个指针数组A,存储已访问过的节点。用一个指针p,每次在链表上移动一步,然后与指针数组A比较,若数组中没有指针与p相同,说明第一次访问p,将p放入数组中;若有指针与p相同,则存在环路,且第一次相同的节点就是环的入口点。

链表长度为n,则需要空间o(n),且每次要与指针数组比较,时间复杂度为 O(n^2)。

方法2:在节点上记录该节点是否被访问过,如果在指针移动过程中遇到已访问过的节点,说明存在环路。同样地,第一次相同的节点就是环的入口点。

方法3:用两个指针,pSlow,pFast,一个慢一个快,慢的一次跳一步,,快的一次跳两步,如果快的能追上慢的就表示有环(pSlow == pFast )。

 类似资料:
  • 本文向大家介绍请问什么是单向链表,如何判断两个单向链表是否相交相关面试题,主要包含被问及请问什么是单向链表,如何判断两个单向链表是否相交时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 考察点:数据结构,算法 公司:百度 1、单向链表 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是

  • 本文向大家介绍请问如何判断一个链表是否有环?相关面试题,主要包含被问及请问如何判断一个链表是否有环?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 方法1:用一个指针数组A,存储已访问过的节点。用一个指针p,每次在链表上移动一步,然后与指针数组A比较,若数组中没有指针与p相同,说明第一次访问p,将p放入数组中;若有指针与p相同,则存在环路,且第一次相同的节点就是环的入口点。 链表长度为n,

  • 本文向大家介绍请问如何判断两个链表是否相交?相关面试题,主要包含被问及请问如何判断两个链表是否相交?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 从头遍历两个链表。创建两个栈,第一个栈存储第一个链表的节点,第二个栈存储第二个链表的节点。每遍历到一个节点时,就将该节点入栈。两个链表都入栈结束后。则通过top判断栈顶的节点是否相等即可判断两个单链表是否相交。因为我们知道,若两个链表相交,则从

  • 本文向大家介绍现在有一个单向链表,谈一谈,如何判断链表中是否出现了环相关面试题,主要包含被问及现在有一个单向链表,谈一谈,如何判断链表中是否出现了环时的应答技巧和注意事项,需要的朋友参考一下 考察点:链表 单链表有环,是指单链表中某个节点的next指针域指向的是链表中在它之前的某一个节点,这样在链表的尾部形成一个环形结构。    

  • 本文向大家介绍如何判断单链表是否是循环链表?相关面试题,主要包含被问及如何判断单链表是否是循环链表?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 时间复杂度:O(n) 空间复杂度:O(1) 两个指针,一个每次走一步,一个每次走两步,如果有环,两者会相遇。相遇后,让一个指针从头结点再次出发,两个指针每次都走一步,直到相遇点即为环入口。 Java 代码示例:

  • 本文向大家介绍请你回答一下如何判断内存泄漏?相关面试题,主要包含被问及请你回答一下如何判断内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 内存泄漏通常是由于调用了malloc/new等内存申请的操作,但是缺少了对应的free/delete。为了判断内存是否泄露,我们一方面可以使用linux环境下的内存泄漏检查工具Valgrind,另一方面我们在写代码时可以添加内存申请和释放的统计功能,统计当