求单链表是否带环,环的长度,环入口点

来源:互联网 发布:电子贺卡软件 编辑:程序博客网 时间:2024/06/06 03:39

1.分析单链表是否带环


2.带环链表环的长度分析


3.求环入口点分析



具体代码如下:
1.hpp文件#pragma once#include typedef struct ListNode{int value;ListNode* next;}node,*pnode;pnode createNode(int data){pnode temp = new node();temp->value = data;temp->next = NULL;return temp;}void InitList(pnode* pHead){*pHead = NULL;}void pushNode(pnode* pHead, int data){if (*pHead == NULL){*pHead = createNode(data);}else{pnode tmp = *pHead;while (NULL != tmp->next){tmp = tmp->next;}tmp->next = createNode(data);}}void Print(pnode pHead){pnode tmp = pHead;while (tmp){printf("%d->",tmp->value);tmp = tmp->next;}printf("NULL");}void MakeLoopList(pnode* pHead){pnode tem = *pHead;while (tem->next){tem = tem->next;}tem->next = *pHead;}bool isHaveLoop(pnode pHead){if (NULL == pHead){return false;}pnode first = pHead;pnode second = pHead;while (NULL != second && NULL != second->next){first = first->next;second = second->next->next;if (first == second){return true;}}return false;}int LoopLength(pnode pHead){int count = 0;if (NULL == pHead){return 0;}pnode first = pHead;pnode second = pHead;while (NULL != first && NULL != first->next){first = first->next;second = second->next->next;if (first == second){count++;first = first->next;while (first != second){first = first->next;count++;}return count;}}return 0;}pnode FindLoopNode(pnode pHead){if (NULL == pHead){return pHead;}pnode f = pHead;pnode s = pHead;while (NULL != f){f = f->next;s = s->next->next;if (f == s){break;}}pnode p = pHead;while (f != p){f = f->next;p = p->next;}return p;}主函数#include "1.hpp"int main(){pnode n;InitList(&n);pushNode(&n, 1);pushNode(&n, 2);pushNode(&n, 3);pushNode(&n, 4);pushNode(&n, 5);pushNode(&n, 6);Print(n);printf("\n");MakeLoopList(&n);printf("%d\n", isHaveLoop(n));printf("%d\n", LoopLength(n));printf("%d\n", FindLoopNode(n)->value);return 0;}

阅读全文
0 0
原创粉丝点击