今天就跟大家聊聊有關(guān)如何判斷鏈表是否包含環(huán),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站重做改版、商州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為商州等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
1 問(wèn)題
判斷鏈表是否包含環(huán)
2 思路
2個(gè)指針,一個(gè)指針走一步,一個(gè)指針走2步,如果相遇則有,反之無(wú)。
3 代碼實(shí)現(xiàn)
#include#include #define true 1 #define false 0; typedef struct node { int value; struct node *next; }Node; /* *判斷鏈表是否有環(huán) */ int isCircleList(Node *head) { if (head == NULL) { return false; } Node *first = NULL; Node *second = NULL; first = head; second = head; while (second != NULL && (second->next) != NULL && (second->next->next != NULL)) { first = first->next; second = second->next->next; if (first == second) { return true; } } return false; } 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->node4 head->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; int result = isCircleList(head); if (result) { printf("list have circle\n"); } else { printf("list do not have circle\n"); } return true; }
4 運(yùn)行結(jié)果
list have circle
看完上述內(nèi)容,你們對(duì)如何判斷鏈表是否包含環(huán)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。