【学习点滴-数据结构-单链表】 判断单链表是否有环
2012-06-28 15:16
399 查看
/* * 算法功能:建立单链表,判断单链表是否有环。 * 函数说明: * 1.initLinkList():建立无环无头结点单链表。 * 2.initLoopList():建立有环的链表。 * 3.isLoopLink():判断链表是否有环。 * @author:xiaoq-ohmygirl * @time :2012-06-25 **/ #include <stdio.h> #include <malloc.h> #include <stdlib.h> #define MAXNODE 5 //单链表结构体 typedef struct linkNode{ int data; linkNode * next; }linkNode,*linkList; //头结点插入法逆序建立无环无头单链表 int initLinkList(linkList & L,int n){ L = (linkList)malloc(sizeof(linkNode)); if(!L){ return 0; } scanf("%d",&L->data); L->next = NULL; linkList p; for(int i = n-1;i > 0;i--){ p = (linkList)malloc(sizeof(linkNode)); scanf("%d",&p->data); p->next = L->next; L->next = p; } return 1; } //在单链表的第k个元素的地方建立loop,由尾节点的指针指向此处。 assert(n>=k) int initLoopLink(linkList &L,int n,int k){ L = (linkList)malloc(sizeof(linkNode)); if(!L){ return 0; } scanf("%d",&L->data); L->next = NULL; linkList p,node; for(int i = n-1;i > 0;i--){ p = (linkList)malloc(sizeof(linkNode)); scanf("%d",&p->data); p->next = L->next; L->next = p; } node = L; for(int i = 0;i < k;i++){ node = node->next; } p = node; while(node->next != NULL){ node = node->next; } node->next = p; return 1; } //测试单链表是否有环。 算法思想:如果单链表有环,那么对于两个初始指向链表头的指针,一个走两步,一个走一步,最终指针一定会相交,反之一定没有环。 linkList isLoopLink(linkList L){ linkList first = L,second = L; while(first != NULL && first->next != NULL){ first = first->next->next; second = second->next; if(first == second){ return first; } } return NULL; } main(){ linkList L = NULL,p = NULL; initLinkList(L,MAXNODE); p = isLoopLink(L); printf("%s",p == NULL?"not loop":"loop"); initLoopLink(L,MAXNODE,2); p = isLoopLink(L); printf("%s",p == NULL?"not loop":"loop"); system("pause"); return 0; }
相关文章推荐
- 【学习点滴-数据结构-单链表】单链表的就地逆置
- 数据结构:单链表操作之如何判断链表是否带环及相关操作
- 【数据结构】单链表—判断一个链表是否形成了环形结构 — 快慢指针
- 【学习点滴-数据结构-单链表】单链表的建立,遍历及有序单链表合并
- 【学习点滴-数据结构-单链表】 求单链表的中间元素和倒数第k个元素
- 数据结构——判断单链表是否有环
- 【学习点滴-数据结构-单链表】交换单链表中任意两个元素
- 算法学习之数据结构之链表是否相交,链表是否存在环
- ]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)
- 数据结构—Java语言判断单链表是否有环与寻找结环节点
- [算法学习]判断链表是否是环结构
- 数据结构——判断单链表是否有环
- 数据结构——链表学习笔记
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 判断常见的数据库数据结构对象是否存在
- 数据结构之链表:实现单链表的逆序 (1)
- 数据结构实验之链表五:单链表的拆分
- 结构之美:判断单链表中是否有环
- 寒假第二天--线性表-- 数据结构实验之链表五:单链表的拆分
- 判断单链表是否为循环链表-----在有序链表中寻找中位数------使用快慢指针