求有环单链表的链表长
生活随笔
收集整理的這篇文章主要介紹了
求有环单链表的链表长
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include <stdio.h>
#include <stdlib.h>
typedef struct node{int value;struct node *next;
}LinkNode,*Linklist;/// 創(chuàng)建鏈表(鏈表長度,環(huán)節(jié)點起始位置)
Linklist createList(){Linklist head = NULL;LinkNode *preNode = head;LinkNode *FifthNode = NULL;for(int i=0;i<6;i++){LinkNode *tt = (LinkNode*)malloc(sizeof(LinkNode));tt->value = i;tt->next = NULL;if(preNode == NULL){head = tt;preNode = head;}else{preNode->next =tt;preNode = tt;}if(i == 3)FifthNode = tt;}preNode->next = FifthNode;return head;
}///判斷鏈表是否有環(huán)
LinkNode* judgeRing(Linklist list){LinkNode *fast = list;LinkNode *slow = list;if(list == NULL)return NULL;while(true){if(slow->next != NULL && fast->next != NULL && fast->next->next != NULL){slow = slow->next;fast = fast->next->next;}elsereturn NULL;if(fast == slow)return fast;}
}///獲取鏈表環(huán)長
int getRingLength(LinkNode *meetNode){int RingLength=0;LinkNode *fast = meetNode;LinkNode *slow = meetNode;for(;;){fast = fast->next->next;slow = slow->next;RingLength++;if(fast == slow)break;}return RingLength;
}///獲取鏈表頭到環(huán)連接點的長度
int getLenA(Linklist list,LinkNode *meetNode){int lenA=0;LinkNode *fast = list;LinkNode *slow = meetNode;for(;;){fast = fast->next;slow = slow->next;lenA++;if(fast == slow)break;}return lenA;
}///釋放空間
int freeMalloc(Linklist list){LinkNode *nextnode = NULL;while(list != NULL){nextnode = list->next;free(list);list = nextnode;}
}int main(){Linklist list = NULL;LinkNode *meetNode = NULL;int RingLength = 0;int LenA = 0;list = createList();meetNode = judgeRing(list);if(meetNode == NULL)printf("No Ring\n");else{printf("Have Ring\n");RingLength = getRingLength(meetNode);LenA = getLenA(list,meetNode);printf("RingLength:%d\n",RingLength);printf("LenA:%d\n",LenA);printf("listLength=%d\n",RingLength+LenA);freeMalloc(list);}return 0;
}
總結(jié)
以上是生活随笔為你收集整理的求有环单链表的链表长的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求有环单链表的环连接点位置
- 下一篇: Sort List