剑指offer之判断链表是否包含环
来源:本站原创|时间:2020-01-10|栏目:C语言|点击: 次
1 问题
判断链表是否包含环
2 思路
2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。
3 代码实现
#include <stdio.h> #include <stdlib.h> #define true 1 #define false 0; typedef struct node { int value; struct node *next; }Node; /* *判断链表是否有环 */ int isCircleList(Node *head) { if (head == NULL) { return false; } Node *first = NULL; Node *second = NULL; first = head; second = head; while (second != NULL && (second->next) != NULL && (second->next->next != NULL)) { first = first->next; second = second->next->next; if (first == second) { return true; } } return false; } int main() { Node *head = NULL; Node *node1 = NULL; Node *node2 = NULL; Node *node3 = NULL; Node *node4 = NULL; Node *node5 = NULL; Node *node6 = NULL; Node *node7 = NULL; head = (Node *)malloc(sizeof(Node)); node1 = (Node *)malloc(sizeof(Node)); node2 = (Node *)malloc(sizeof(Node)); node3 = (Node *)malloc(sizeof(Node)); node4 = (Node *)malloc(sizeof(Node)); node5 = (Node *)malloc(sizeof(Node)); node6 = (Node *)malloc(sizeof(Node)); node7 = (Node *)malloc(sizeof(Node)); if (head == NULL || node1 == NULL || node2 == NULL || node3 == NULL || node4 == NULL || node5 == NULL || node6 == NULL || node7 == NULL) { printf("malloc fail\n"); return false; } // node7<-node6 <-node5 // | | //head->node1->node2->node3->node4 head->value = 0; head->next = node1; node1->value = 1; node1->next = node2; node2->value = 2; node2->next = node3; node3->value = 3; node3->next = node4; node4->value = 4; node4->next = node5; node5->value = 5; node5->next = node6; node6->value = 6; node6->next = node7; node7->value = 7; node7->next = node2; int result = isCircleList(head); if (result) { printf("list have circle\n"); } else { printf("list do not have circle\n"); } return true; }
4 运行结果
list have circle
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章
- 01-10APUE笔记之:进程环境详解
- 01-10内部排序之堆排序的实现详解
- 01-10进程间通信之深入消息队列的详解
- 01-10海量数据处理系列之:用C++实现Bitmap算法
- 01-10如何求连续几个数之和的最大值
- 01-10C++算法之海量数据处理方法的总结分析
- 01-10深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换
- 01-10用代码和UML图化解设计模式之桥接模式的深入分析
- 01-10C++代码规范之命名规则
- 01-10C语言之free函数以及野指针介绍
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11ajax实现页面的局部加载
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10C#中split用法实例总结
- 01-10SublimeText编译C开发环境设置
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 04-02jquery与jsp,用jquery
- 08-05dedecms(织梦)副栏目数量限制代码修改