检查单链表中是否有环的存在
2018-01-30 10:05
162 查看
检查单链表中是否有环的存在,可以用两个指针来遍历,fast指针和slow指针,fast指针每次走两步,slow指针每次走一步,
若单链表中有环,则在遍历了很多遍后两指针终会相遇,若单链表中没有环,则fast指针先到达链表的末尾。#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char a;
struct Node *next;
}Node,*LinkList;
void create(LinkList L)
{
LinkList p,s;
p=(LinkList)malloc(sizeof(Node));
L->next=p;
//p->next=L->next;
int i=0;
while(i<15)
{
s=(LinkList)malloc(sizeof(Node));
//s->next=L->next;
p->next=s;
p=s;
i++;
}
s->next=L->next->next;
}
void Loop(LinkList L)
{
LinkList fast,slow;
fast=slow=L->next;
while(fast!=NULL&&fast->next!=NULL)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
break;
}
if(fast==slow)
{
printf("这个链表里面有环\n");
}
else
{
printf("此单链表没有环存在\n");
}
}
int main()
{
Node L;
create(&L);
Loop(&L);
return 0;
}
若单链表中有环,则在遍历了很多遍后两指针终会相遇,若单链表中没有环,则fast指针先到达链表的末尾。#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char a;
struct Node *next;
}Node,*LinkList;
void create(LinkList L)
{
LinkList p,s;
p=(LinkList)malloc(sizeof(Node));
L->next=p;
//p->next=L->next;
int i=0;
while(i<15)
{
s=(LinkList)malloc(sizeof(Node));
//s->next=L->next;
p->next=s;
p=s;
i++;
}
s->next=L->next->next;
}
void Loop(LinkList L)
{
LinkList fast,slow;
fast=slow=L->next;
while(fast!=NULL&&fast->next!=NULL)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
break;
}
if(fast==slow)
{
printf("这个链表里面有环\n");
}
else
{
printf("此单链表没有环存在\n");
}
}
int main()
{
Node L;
create(&L);
Loop(&L);
return 0;
}
相关文章推荐
- 检查一个链表是否存在环的demo程
- 用户注册时,不提交表单的情况下,检查用户名是否存在
- 判断单循环链表中是否存在环
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- sql server检查临时表是否存在
- 解决MVC中检查用户名是否存在的问题
- 检查输入的字符串中是否有空格存在
- 单链表逆序、判断单链表中是否存在环、两个不存在环的链表是否相交
- 带有头结点的单链表中判断是否存在环
- thinkphp检查上传文件时是否已存在
- 在VC里如何检查一个文件是否存在
- 判断链表是否存在环
- AJAX应用--基于HTML,以GET或POST方式,检查注册用户名是否存在
- 如何自己检查NodeJS的代码是否存在内存泄漏
- 动软中,在连接服务器时,出现“添加服务器配置失败,请检查是否有写入权限或文件是否存在“错误
- 浅谈PHP检查数组中是否存在某个值 in_array 函数
- 简单的iOS通讯录操作封装(添加联系人、检查号码是否存在
- ASP.NET FTP的操作(包括上传、下载、重命名、删除、检查是否存在)
- 【IT笔试面试题整理】判断链表是否存在环路,并找出回路起点
- 检查输入的字符串中是否有空格存在