日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指offer之找到链表里面包含环的入口节点

發布時間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer之找到链表里面包含环的入口节点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1?問題

劍指offer之找到鏈表里面包含環的入口節點,比如

// node7<-node6 <-node5// | |//head->node1->node2->node3->node4

環的入口節點是node2

?

?

?

?

?

?

2?代碼實現

#include <stdio.h> #include <stdlib.h>#define true 1 #define false 0 typedef struct node {int value;struct node *next; } Node;/***得到環的第一個公共節點*/ Node *getCommonNode(Node *head) {if (head == NULL){return NULL;}Node *first = NULL;Node *second = NULL;first = head;second = head;int isCircle = false;//判斷是否有環while (second != NULL && (second->next) != NULL && (second->next->next != NULL)){first = first->next;second = second->next->next;if (first == second){isCircle = true;break;}}if (isCircle == false){printf("the list do not circle\n");return NULL; }//判斷環的大小,這個時候肯定是進到環里面去了int len = 0;first = first->next;++len;while (first != second){len++;first = first->next;}//求出入口節點Node *start = head;Node *end = head;while (len-- > 0){end = end->next;}while (start != end){start = start->next;end = end->next;}return start; }int main() {Node *head = NULL;Node *node1 = NULL;Node *node2 = NULL;Node *node3 = NULL;Node *node4 = NULL;Node *node5 = NULL;Node *node6 = NULL;Node *node7 = NULL;head = (Node *)malloc(sizeof(Node));node1 = (Node *)malloc(sizeof(Node));node2 = (Node *)malloc(sizeof(Node));node3 = (Node *)malloc(sizeof(Node));node4 = (Node *)malloc(sizeof(Node));node5 = (Node *)malloc(sizeof(Node));node6 = (Node *)malloc(sizeof(Node));node7 = (Node *)malloc(sizeof(Node));if (head == NULL || node1 == NULL || node2 == NULL || node3 == NULL|| node4 == NULL || node5 == NULL || node6 == NULL || node7 == NULL){printf("malloc fail\n");return false;}// node7<-node6 <-node5// | |//head->node1->node2->node3->node4head->value = 0;head->next = node1;node1->value = 1;node1->next = node2;node2->value = 2;node2->next = node3;node3->value = 3;node3->next = node4;node4->value = 4;node4->next = node5;node5->value = 5;node5->next = node6;node6->value = 6;node6->next = node7;node7->value = 7;node7->next = node2;Node *result = getCommonNode(head);if (result != NULL){printf("the first common value is %d\n", result->value);}else{printf("list do not have circle\n");}return true; }

?

?

?

?

?

?

3?運行結果

the first common value is 2

?

總結

以上是生活随笔為你收集整理的剑指offer之找到链表里面包含环的入口节点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。