`
小网客
  • 浏览: 1243665 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

判断数组链表环相关算法

 
阅读更多

一般需求如下:

1.判断某链表中是否有环(某年研究生入学统招试题)?

2.判断某int[]是否有环,举例如下根据其值 array[i]=0时原地不走,相当于有环了;array[i]=-10,向后移动10步;array[i]=10向前走10步。当某停止点两次停止过那么算有环

 

分析:

在有足够空间的前提下都容易实现,在没有额外空间的前提下(变量不算),那么就需要思考了,题目2如果不是int而是一个object那么很容易,对object进行封装两个属性来标记是否访问过,同时题目1也适用,我们可以对访问过的节点设置某值来区分是否访问过,也可以通过步长不等的指针遍历,当指针重合的时候代表有环,其实这两个题都适用。

 

思路1:

题目1和2均使用:

定义两个指针p1和p2,p1每次走1个单元,p2每次走2个单元(题目2的两次停顿);

当p1和p2重叠就代表有环,反之无环;

 

思路2:

定义一个指针,找一个固定值并且能区分其他节点值,当访问过了就设置标记位,来标记是否访问过,题目1看具体的需求,科目2设置成0;

遍历设置标记位,当要遍历的值跟设置的值相同那么有环,反之无环;

 

0
1
分享到:
评论

相关推荐

    java面试编程题(数组和链表相关) 数组和链表.pdf

    本资源主要讲解了Java面试编程题中的数组和链表相关知识点,涵盖了Java编程语言中数组和链表的基本概念、算法和数据结构等方面的知识。 一、数组相关知识点 1. 、二维数组的概念和性质:在 Java 中,二维数组是一...

    Java用数组和链表的方式简单实现HashMap的增删改功能 数组和链表.pdf

    在Java中,HashMap的实现方式有多种,本文将介绍使用数组和链表的方式简单实现HashMap的增删改功能。 HashMap的数据结构 HashMap的数据结构主要由三个部分组成:数组、链表和红黑树。数组用于存储键值对,链表用于...

    go语言通过数组和链表的方式实现队列 数组和链表.pdf

    "go语言通过数组和链表的方式实现队列" 从给定的文件信息中,我们可以生成以下知识点: 1.队列的定义:队列是一种特殊的线性表,只能在队列的尾部添加元素,在队列的头部删除元素,先进先出(FIFO)。 2.go语言中...

    约瑟夫环问题(数组实现,链表实现

    在约瑟夫环问题中,我们可以将数组的索引视为人的位置,数组的值表示每个人的状态(例如,是否已被淘汰)。初始化时,数组的每个元素值为1,表示人都在圈内。每次报数后,对应数组元素值为0,表示该人已经出局。当...

    算法面试通关40讲完整课件 05-07 数组、链表

    2. 链表环检测(Linked List Cycle, 如LeetCode的第141题):判断链表中是否存在环,并找出环的起点。 3. 两两交换链表中的节点(Swap Nodes in Pairs, 如LeetCode的第142题):将链表中相邻的节点两两交换。 4. ...

    栈关于数组与链表的实现

    6. **判断栈空**:isEmpty函数,检查栈顶指针是否为空或数组长度是否为零。 7. **错误处理**:考虑栈溢出或栈空时的错误处理,如使用assert断言或返回错误代码。 在C语言中,我们还需要注意内存管理,如使用malloc...

    Java栈的实例-数组和链表两种方法 数组和链表.pdf

    链表实现的栈在空间效率上可能不如数组实现的栈,因为每个节点都需要额外的空间存储指针,但在处理大量数据且频繁的动态扩展时,链表的性能更优,因为它不需要像数组那样移动元素。 总之,Java中的栈可以通过数组或...

    圆桌问题(数据结构作业+数组和链表)(1024程序员不容易,这次给源码) 数组和链表.pdf

    在本题目中,我们面临的是一个数据结构相关的编程挑战,具体来说是关于数组和链表的应用。题目名为"圆桌问题",这是一个经典的问题,旨在测试程序员对数据结构的理解以及解决问题的能力。在这个问题中,我们需要处理...

    c++写的链表综合算法设计

    5. **链表算法设计**: - 排序算法:可以使用链表实现各种排序算法,如插入排序、快速排序、归并排序等。 - 查找算法:如二分查找(适用于有序链表),线性查找(适用于无序链表)。 - 复杂操作:如逆序链表、...

    九章算法之链表与数组(Linked List & Array)

    在进行算法设计时,选择链表还是数组取决于具体的需求。数组能够快速随机访问,因为可以通过计算下标直接定位到内存地址。但是,数组的大小一旦确定就无法改变,如果要进行元素的插入或删除操作,可能需要进行数据的...

    链表相关算法.rar

    - **链表中环的检测**:判断链表中是否存在环。Floyd判圈算法(快慢指针)是一个有效的解决方案,快指针每次前进两步,慢指针每次前进一步,如果存在环,两者最终会在环内相遇。 - **合并两个有序链表**:将两个已...

    链表的19种算法(C语言)

    7. **判断链表环**:检查链表中是否存在环。Floyd's Cycle-Finding Algorithm(快慢指针)是常用的方法,快指针每次移动两个节点,慢指针每次移动一个,如果存在环,两者会在环内相遇。 8. **链表排序**:对链表...

    常用算法链表堆栈二叉树.docx

    判断链表是否有环可以使用 FloydCycle-Finding 算法,该算法使用两个指针,一个快指针和一个慢指针。如果链表中有环,那么快指针一定会追上慢指针。 二、栈 栈是一种後入先出(Last In First Out,LIFO)的数据...

    编程技巧-哨兵在链表和数组中的使用及解析 数组和链表.pdf

    编程技巧中,哨兵结点(sentinel)是一种特殊的结点,它可以简化链表和数组中的操作,减少边界条件的判断和特殊处理。本文将详细介绍哨兵结点在链表和数组中的使用、优点、以及与普通写法的比较。 一、哨兵结点在...

    算法链表.docx

    本文将深入探讨链表的几个关键操作:链表反转、合并有序列表、新增节点、删除节点、判断链表是否有环以及找到链表的中间节点。我们将使用Java语言进行讨论。 首先,链表不同于数组,它不依赖于内存中的连续空间。每...

    通用双向链表以及内存检漏算法

    内存检漏检测算法可能会包括以下策略:记录分配和释放的内存块信息,使用哈希表或关联数组存储这些信息;在分配内存时增加标记,用于追踪内存的来源;或者利用运行时库提供的信息,如GNU的malloc库提供的钩子函数。...

    JavaScript将数组转换为链表的方法

    在某些场景下,我们可能需要将数组转换为链表,例如在实现特定算法或者优化某些操作时。本文将深入探讨如何使用JavaScript将数组转换为链表,并提供一个具体的实现示例。 首先,我们需要理解数组和链表的基本概念。...

    单循环链表(带头结点和不带头结点)

    - **操作复杂性**:在不带头结点的链表中,插入和删除操作可能需要更多的判断和处理,因为没有明确的头节点指示链表的起点。 - **示例代码**: ```cpp struct Node { int data; Node* next; }; class ...

    链表算法详细代码

    链表算法代码通常会涵盖这些基本操作,对于学习和理解数据结构和算法至关重要。通过对链表的深入理解和熟练操作,可以解决许多复杂的问题,比如在有限内存空间中高效地处理大量数据。因此,对链表的熟练掌握是成为一...

Global site tag (gtag.js) - Google Analytics