国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

C++語言判斷單鏈表是否有環鏈表 程序源碼

[復制鏈接]
樓主
Jonsa 發表于 2021-11-15 17:07:19 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
1.問題:如果給定一個單鏈表,如何判斷其是否為有環鏈表
2.方法:
(1)從給定鏈表的第一個節點開始遍歷,每遍歷至一個節點,都將其和所有的前驅節點進行比對,如果為同一個節點,則表明當前鏈表中有環;反之,如果遍歷至鏈表最后一個節點,仍未找到相同的節點,則證明該鏈表中無環。
C++語言判斷單鏈表是否有環鏈表 程序源碼 112215vqiz0ywa4ghyktkq.png

如上所示,當函數的返回值為 True,表示該鏈表有環;反之若函數返回值為 False,表明鏈表中無環。顯然,此實現方案的時間復雜度為O(n2)。
(2)在一個鏈表中,如果 2 個指針(假設為 H1 和 H2)都從表頭開始遍歷鏈表,其中 H1 每次移動 2 個節點的長度(H1 = H1->next->next),而 H2 每次移動 1 個節點的長度(H2 = H2->next),如果該鏈表為有環鏈表,則 H1、H2 最終必定會相等;反之,如果該鏈表中無環,則 H1、H2 永遠不會相遇。
C++語言判斷單鏈表是否有環鏈表 程序源碼 112437ma8ek4bzlx9wt22i.png

本算法的時間復雜度為 O(n)。
源碼:
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. //自定義 bool 類型
  4. typedef enum Bool
  5. {
  6.     False=0,
  7.     True=1
  8. }Bool;

  9. typedef struct link{
  10.     int data;
  11.     struct link* next;
  12. }link;

  13. link *linkIint(int n)
  14. {
  15.     link *head=(link*)malloc(sizeof(link));
  16.     head->data=1;
  17.     head->next=NULL;
  18.     link *phead=head;
  19.     int i;
  20.     for(i=2;i<=n;i++)
  21.     {
  22.         link *temp=(link*)malloc(sizeof(link));
  23.         temp->data=i;
  24.         temp->next=NULL;

  25.         head->next=temp;
  26.         head=head->next;
  27.     }
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 01:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表