数据结构——判断单链表是否有环
来源:互联网 发布:mysql数据库删除主键 编辑:程序博客网 时间:2024/06/06 06:39
#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define INSERT_NUM 100#define FAST_POINT_STEP 2typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode *next;}LinkList, *pNode;//init the linklistvoid initList(pNode *head){ (*head) = (LinkList*)malloc(sizeof(LinkList)); (*head)->next = NULL; (*head)->data = 9;}//insert Elementint insertElem(pNode head, ElemType data){ pNode pInsertNode; pNode pWork; pWork = head; pInsertNode = (LinkList*)malloc(sizeof(LinkList)); //memset(pInsertNode, 0, sizeof(LinkList)); if(pInsertNode == NULL){ return 0; } pInsertNode->next = NULL; pInsertNode->data = data; while(pWork->next != NULL){ pWork = pWork->next; } pWork->next = pInsertNode; return 1;}//print node data one by onevoid printList(pNode head){ printf("in the function printList\n"); if(head == NULL){ printf("List is empty----\n"); } pNode p = head->next; do{ printf("%d", p->data); printf("--->"); p = p->next; }while(p != NULL); }//make the LinkList loopvoid makeLoop(pNode head){ pNode p = head; while(p->next != NULL ){ p = p->next; } p->next = head->next;}//tell if is a loop list?int isListLoop(pNode head){ int i; pNode slow = head; pNode fast = head; while(fast){ for(i = 0 ; i < FAST_POINT_STEP ; i++){ fast = fast->next; if(fast == slow) return 1; else if(fast == NULL) return 0; } slow = slow->next; } return 0;}void main(){ int i; pNode head; initList(&head); for(i = 0 ; i < INSERT_NUM ; i++){ insertElem(head, i); } makeLoop(head); //printList(head); if(isListLoop(head)) printf("is a loop list \n"); else printf("is not a loop list\n");}
之前在网上看到有人说,判断一个链表是否有环,还可以使用两个for循环嵌套的方法,当外层循环步进一个节点时,内层循环就遍历外层循环节点之后的所有节点,然后比较内外循环的两个节点。若有节点地址相等,则表明该单链表有循环,反之则不存在循环。这种方法无疑效率比较低。而且如果出现下面这种情况的话,会更加麻烦。
- 数据结构——判断单链表是否有环
- 数据结构——判断单链表是否有环
- 数据结构——判断链表是否有环
- 数据结构—Java语言判断单链表是否有环与寻找结环节点
- 【学习点滴-数据结构-单链表】 判断单链表是否有环
- 数据结构 - 判断单链表是否有环(C++)
- 数据结构List实例(五):判断单链表是否有环
- 【数据结构-图】判断图是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环?
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- 判断单链表是否有环
- VisualSVN 客户端配置
- linux输入输出重定向详解
- Android 4.0 Launcher源码分析系列
- EVC环境安装指南
- CE 6.0 开发工具 Platform Build 5.0 & Evc++4.0 sp4 安装资源下载 收藏
- 数据结构——判断单链表是否有环
- 电脑常用的软件及配置_笔记
- Linux符号连接的层数过多
- 语不惊人死不休(68)我们经历磨难,是为了更好地安慰他人
- Android 录音数据传输
- java例程练习(数据类型转换)
- 细说Linux链接文件类型
- Android中包含Header和Footer的无限ListView的实现
- android各种组件的监听器