国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
C++語言判斷單鏈表是否有環鏈表 程序源碼
[打印本頁]
作者:
Jonsa
時間:
2021-11-15 17:07
標題:
C++語言判斷單鏈表是否有環鏈表 程序源碼
1.問題:如果給定一個單鏈表,如何判斷其是否為有環鏈表
2.方法:
(1)從給定鏈表的第一個節點開始遍歷,每遍歷至一個節點,都將其和所有的前驅節點進行比對,如果為同一個節點,則表明當前鏈表中有環;反之,如果遍歷至鏈表最后一個節點,仍未找到相同的節點,則證明該鏈表中無環。
112215vqiz0ywa4ghyktkq.png
(89.12 KB)
下載附件
2021-11-15 15:08 上傳
如上所示,當函數的返回值為 True,表示該鏈表有環;反之若函數返回值為 False,表明鏈表中無環。顯然,此實現方案的時間復雜度為O(n2)。
(2)在一個鏈表中,如果 2 個指針(假設為 H1 和 H2)都從表頭開始遍歷鏈表,其中 H1 每次移動 2 個節點的長度(H1 = H1->next->next),而 H2 每次移動 1 個節點的長度(H2 = H2->next),如果該鏈表為有環鏈表,則 H1、H2 最終必定會相等;反之,如果該鏈表中無環,則 H1、H2 永遠不會相遇。
112437ma8ek4bzlx9wt22i.png
(65.71 KB)
下載附件
2021-11-15 15:08 上傳
本算法的時間復雜度為 O(n)。
源碼:
#include<stdio.h>
#include<stdlib.h>
//自定義 bool 類型
typedef enum Bool
{
False=0,
True=1
}Bool;
typedef struct link{
int data;
struct link* next;
}link;
link *linkIint(int n)
{
link *head=(link*)malloc(sizeof(link));
head->data=1;
head->next=NULL;
link *phead=head;
int i;
for(i=2;i<=n;i++)
{
link *temp=(link*)malloc(sizeof(link));
temp->data=i;
temp->next=NULL;
head->next=temp;
head=head->next;
}
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0