剑指offer之判断链表是否包含环
更新时间:2019年02月21日 16:11:08 作者:chenyu_insist
今天小编就为大家分享一篇关于剑指offer之判断链表是否包含环,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
相关文章
C++ Boost PointerContainer智能指针详解
智能指针是一种像指针的C++对象,但它能够在对象不使用的时候自己销毁掉。虽然STL提供了auto_ptr,但是由于不能同容器一起使用(不支持拷贝和赋值操作),因此很少有人使用。它是Boost各组件中,应用最为广泛的一个2022-11-11
Visual Studio Code 2020安装教程及CPP环境配置(教程图解)
这篇文章主要介绍了Visual Studio Code 2020安装教程、CPP环境配置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-03-03


最新评论