C程序:如何判断链表是否有环
C程序:如何判断链表是否有环
这是个常见的面试题哦,总之我面试的时候遇到过, 当时没有答上来,回去后想出来下面的方法一,该法还有个附加优点,可以判断出链表在哪个地方形成环的(即如果想拆开这个环,从哪个地方断开)。
后来知道还有个经典算法,即使用两个指针,一快一慢向前试探,如果最终重合则链表有环,果然优美的算法。
#include <stdio.h>
typedef struct list {
int data;
struct list *next;
} LIST;
/* Method 1: check the occurrence of p->next from head to p */
int check_circle_1(LIST *head) {
LIST *p = head, *q= NULL;
if (p == NULL)
return 0;
while (p->next) {
/* check whether p points to itself */
if (p->next == p) {
return 1;
}
/* check the occurrence of p->next in head to p */
q = head;
while (q != p) {
if (q == p->next) {
return 1;
}
q = q->next;
}
p = p->next;
}
/* p->next is NULL, not a circle */
return 0;
}
/* Method 2: q goes faster than p, if at last p == q, means there's circle */
/* 优点:逻辑上简单。 缺点:无法具体知道从哪个点拆开该圈 */
int check_circle_2(LIST *head) {
LIST *p, *q;
p = head;
if (p == NULL)
return 0;
q = p->next;
while (p != NULL && q != NULL) {
if (p == q) {
return 1;
}
p = p->next;
if (q->next == NULL) {
return 0;
} else {
q = q->next->next;
}
}
return 0;
}
int main() {
LIST a, b, c, *head = &a;
a.next = &b;
b.next = &c;
c.next = &a;
printf("%d/n", check_circle_1(head));
printf("%d/n", check_circle_2(head));
}
C程序:如何判断链表是否有环相关推荐
- 判断链表是否存在环(及其延伸)
有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环. 问题: 1.如何判断一个链表是不是这类链表? 2.如果链表为存在环,如果找到环的入口点 ...
- 数据结构---判断链表是否有环
判断链表是否有环 判断链表是否有环 方法1 方法2 JAVA实现 问题扩展1 问题扩展2 判断链表是否有环 有一个单向链表,链表中有可能出现"环",就像下图这样.那么,如何用程序来 ...
- 【刷算法】判断链表是否有环以及返回入环节点
题目描述 判断一个单链表是否有环,有环则返回入环节点,否则返回null 1->2->3->4->5->6↑ ↓8<-7 复制代码 例如上面这个链表就有环,入环节点是 ...
- 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142
一.简介:什么是快慢指针? 快慢指针,顾名思义,无非就是设置一个快指针,一个慢指针,初始化的时候,快指针和慢指针都指向链表的头结点,前进的时候一个在前一个在后,结合起来可以十分巧妙的解决链表中的一些问 ...
- 剑指offer之判断链表是否包含环
1 问题 判断链表是否包含环 2 思路 2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无. 3 代码实现 #include <stdio.h> #include <st ...
- 数据结构:单链表操作之如何判断链表是否带环及相关操作
//判断链表是否有环 int HasCircle(Node* pHead) { Node* low=pHead; Node* fast=pHead; while(fast != NULL &a ...
- 面试题:判断链表是否存在环
题目:判断链表是否存在环 思路:定义快慢指针,如果两个指针相遇则一定存在环. 1 public bool IsCircled(Node First) 2 { 3 if (First == null | ...
- 快慢指针判断链表是否有环
链表中很经常会出现的一个问题,判断链表是否有环,标准答案也已经烂熟于心,设置快慢指针,快指针每次走2步,慢指针每次走1步,如果两个指针可以相遇的话,证明链表有环,反之无环. 我有时候就犯嘀咕,它俩一定 ...
- 数据结构-链表(判断链表是否有环)
如何判断链表是否有环 方法1:采用快慢指针 /***************************** 函数名称:JudgmentLinkRing_1(PtrList list)* 功能描述:判断链 ...
最新文章
- 清华数为大数据应用低代码开发工具DWF 2021成长回顾
- ABP入门系列(7)——分页实现
- c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏
- 直击阿里新一代数据库技术:如何实现极致弹性能力?
- python学习笔记(十)标准库pprint
- C++(14)--面向对象
- cmw500综合测试仪使用_网络性能测试仪该怎么选
- 可以记录阅读进度的 pdf 电脑阅读器
- java 加载spring_spring的加载机制?
- 极简主义︱使用Turicreate进行快速图像分类迁移训练与预测(六)
- c++删除文件delete_关于macos删除快捷键,你知道这些区别用法吗?
- 用swing开发 震撼的CSDN用户关系图(转)和基于JMF的java rpg入门游戏
- C# Gooflow+layer弹出层 全js代码
- PHP自学---黑马程序员笔记【持续更新】
- 娃哈哈的困境,宗庆后的难题
- 了解MVP(最小可行产品) - 以及为什么我更喜欢最早的可测试/可用/可爱
- 手把手教你如何实现一个简单的数据加密算法
- iOS面试备战-网络篇
- linux网络与防火墙
- ubuntu中如何运行exe文件
热门文章
- Matlab之时间转字符串函数datestr
- 布局大数据 编织“智慧云”
- 得到-薛兆丰的北大经济学课-4-价格的作用
- Advances in Graph Neural Networks笔记4:Heterogeneous Graph Neural Networks
- syzkaller 源码阅读笔记2(syz-manager)
- 测试5年从中兴 15K 跳槽去腾讯 32K+16,啃完这份笔记你也可以
- 2023 聚合易支付系统开源源码
- 我的ON BEACH生活 ———捡贝壳(二)
- OKR 和项目管理之间的紧张关系
- 【STC8A8K64S4A12开发板】—开始做 定时器/计数器 实验啦