知识大全 判断单链表是否有环
Posted 步长
篇首语:提兵百万西湖上,立马吴山第一峰!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 判断单链表是否有环相关的知识,希望对你有一定的参考价值。
算法思想 先分析是否有环 为此我们建立两个指针 从header一起向前跑 一个步长为 一个步长为 用while(直到步长 的跑到结尾)检查两个指针是否相等 直到找到为止 static bool JudgeCircleExists(Link head) Link first = head; // step each time Link second = head; // steps each time while (second Next != null &# ;&# ; second Next Next != null) second = second Next Next; first = first Next; if (second == first) return true; return false;
那又如何知道环的长度呢? 根据上面的算法 在返回true的地方 也就是 个指针相遇处 这个位置的节点P肯定位于环上 我们从这个节点开始先前走 转了一圈肯定能回来 static int GetCircleLength(Link point) int length = ; Link curr = point; while (curr Next != point) length++; curr = curr Next; return length;
继续我们的讨论 如何找到环的 起始 点呢? 延续上面的思路 我们仍然在返回true的地方P 计算一下从有环单链表的表头head到P点的距离 static int GetLengthFromHeadToPoint(Link head Link point) int length = ; Link curr = head; while (curr != point) length++; curr = curr Next; return length;
cha138/Article/program/sjjg/201405/30932相关参考
查找操作 ()按序号查找 从单链表的第一个元素结点起判断当前结点是否是第i个若是则返回该结点的指针否则继续下一个结点的查找直到表结束为止若没有第i个结点则返回空如果i=返回头指针 算法如下
判断链表是否存在环型链表问题判断一个链表是否存在环例如下面这个链表就存在一个环例如N>N>N>N>N>N就是一个有环的链表环的开始结点是N这里有一个比较简单的解法设置两个
单链表的运算建立单链表 假设线性表中结点的数据类型是字符我们逐个输入这些字符型的结点并以换行符\\n为输入条件结束标志符动态地建立单链表的常用方法有如下两种()头插法建表①算法思路 从一个空表开始
知识大全 有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表展开称一级单链表
这个二级单链表只包括一些headpublicclassLinkpublicLinkNext;publicintData;publicLink(Linknextintdata)thisNext=next
单链表的运算 建立单链表 假设线性表中结点的数据类型是字符我们逐个输入这些字符型的结点并以换行符\\n为输入条件结束标志符动态地建立单链表 的常用方法有如下两种 ()头插法建表 ①算法思
()本题要求倒排循环链表与上面倒排单链表处理不同之处有二一是初始化成循环链表而不是空链表;二是判断链表尾不用空指针而用是否是链表头指针算法中语句片段如下 p=la>next;∥p为工作指针
销毁单链表 单链表被构造使用完后由于其结点均为动态分配的内存空间所以必须要销毁以释放空间否则会造成申请的内存不能释放单链表的销毁操作是创建操作的逆运算由于要修改单链表的头指针的指针变量所以要将头
图双向链表中的结点删除 双向链表的结束条件和单链表相同双向循环链表的结束条件和单向循环链表的结束条件相同 静态链表 根据上节单链表的知识用单链表表示线性表时其结点空间是在运行时根据需要动态分
单链表 链接存储方法 链接方式存储的线性表简称为链表(LinkedList) 链表的具体存储表示为 ①用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的也可以是不连续的)
单链表链接存储方法 链接方式存储的线性表简称为链表(LinkedList) 链表的具体存储表示为 ①用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的也可以是不连续的) ②链表