精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

五個解決辦法教你C++中檢測鏈表中的循環

開發 后端
通過5個解決方案教你C++中檢測鏈表中的循環,快來看看,是否對你有幫助!

五個解決辦法教你C++中檢測鏈表中的循環

給定一個鏈表,檢查鏈表是否有循環。下圖顯示了帶有循環的鏈表。

五個解決辦法教你C++中檢測鏈表中的循環

 

以下是執行此操作的不同方法 

 

解決方案1:散列方法:

遍歷該列表,并將節點地址始終放在哈希表中。在任何時候,如果達到NULL,則返回false,如果當前節點的下一個指向Hash中先前存儲的任何節點,則返回true。

  1. #include <bits/stdc++.h> 
  2. using namespace std; 
  3. struct Node { 
  4.     int data; 
  5.     struct Node* next
  6. }; 
  7.   
  8. void push(struct Node** head_ref, int new_data) 
  9.     struct Node* new_node = new Node; 
  10.     new_node->data = new_data; 
  11.     new_node->next = (*head_ref); 
  12.     (*head_ref) = new_node; 
  13. bool detectLoop(struct Node* h) 
  14.     unordered_set<Node*> s; 
  15.     while (h != NULL) { 
  16.         if (s.find(h) != s.end()) 
  17.             return true
  18.         s.insert(h); 
  19.   
  20.         h = h->next
  21.     } 
  22.   
  23.     return false
  24. int main() 
  25.     struct Node* head = NULL
  26.   
  27.     push(&head, 20); 
  28.     push(&head, 4); 
  29.     push(&head, 15); 
  30.     push(&head, 10); 
  31.     head->next->next->next->next = head; 
  32.   
  33.     if (detectLoop(head)) 
  34.         cout << "Loop found"
  35.     else 
  36.         cout << "No Loop"
  37.   
  38.     return 0; 

復雜度分析:

時間復雜度: O(n)。
只需循環一次即可。

輔助空間: O(n)。
n是將值存儲在哈希圖中所需的空間。

解決方案2:通過修改鏈表數據結構,無需哈希圖即可解決此問題。
方法:此解決方案需要修改基本鏈表數據結構。

  • 每個節點都有一個訪問標志。
  • 遍歷鏈接列表并繼續標記訪問的節點。
  • 如果您再次看到一個訪問過的節點,那么就會有一個循環。該解決方案適用于O(n),但每個節點都需要其他信息。
  • 此解決方案的一種變體不需要修改基本數據結構,可以使用哈希來實現,只需將訪問的節點的地址存儲在哈希中,如果您看到哈希中已經存在的地址,則存在一個循環。

C++:

  1. #include <bits/stdc++.h> 
  2. using namespace std; 
  3. struct Node { 
  4.     int data; 
  5.     struct Node* next
  6.     int flag; 
  7. }; 
  8.   
  9. void push(struct Node** head_ref, int new_data) 
  10.     struct Node* new_node = new Node; 
  11.     new_node->data = new_data; 
  12.   
  13.     new_node->flag = 0; 
  14.     new_node->next = (*head_ref); 
  15.     (*head_ref) = new_node; 
  16. bool detectLoop(struct Node* h) 
  17.     while (h != NULL) { 
  18.         if (h->flag == 1) 
  19.             return true
  20.         h->flag = 1; 
  21.   
  22.         h = h->next
  23.     } 
  24.   
  25.     return false
  26. int main() 
  27.     struct Node* head = NULL
  28.   
  29.     push(&head, 20); 
  30.     push(&head, 4); 
  31.     push(&head, 15); 
  32.     push(&head, 10); 
  33.     head->next->next->next->next = head; 
  34.   
  35.     if (detectLoop(head)) 
  36.         cout << "Loop found"
  37.     else 
  38.         cout << "No Loop"
  39.   
  40.     return 0; 

復雜度分析:

時間復雜度: O(n)。
只需循環一次即可。

輔助空間: O(1)。
不需要額外的空間。

解決方案3:Floyd的循環查找算法
方法:這是最快的方法,下面進行了介紹:

  • 使用兩個指針遍歷鏈表。
  • 將一個指針(slow_p)移動一個,將另一個指針(fast_p)移動兩個。
  • 如果這些指針在同一節點相遇,則存在循環。如果指針不符合要求,則鏈接列表沒有循環。

Floyd的循環查找算法的實現:

  1. #include <bits/stdc++.h> 
  2. using namespace std; 
  3. class Node { 
  4. public
  5.     int data; 
  6.     Node* next
  7. }; 
  8.   
  9. void push(Node** head_ref, int new_data) 
  10.     Node* new_node = new Node(); 
  11.     new_node->data = new_data; 
  12.     new_node->next = (*head_ref); 
  13.     (*head_ref) = new_node; 
  14.   
  15. int detectLoop(Node* list) 
  16.     Node *slow_p = list, *fast_p = list; 
  17.   
  18.     while (slow_p && fast_p && fast_p->next) { 
  19.         slow_p = slow_p->next
  20.         fast_p = fast_p->next->next
  21.         if (slow_p == fast_p) { 
  22.             return 1; 
  23.         } 
  24.     } 
  25.     return 0; 
  26. int main() 
  27.     Node* head = NULL
  28.   
  29.     push(&head, 20); 
  30.     push(&head, 4); 
  31.     push(&head, 15); 
  32.     push(&head, 10); 
  33.     head->next->next->next->next = head; 
  34.     if (detectLoop(head)) 
  35.         cout << "Loop found"
  36.     else 
  37.         cout << "No Loop"
  38.     return 0; 

解決方案4:在不修改鏈接列表數據結構的情況下標記訪問的節點
在此方法中,將創建一個臨時節點。使遍歷的每個節點的下一個指針指向該臨時節點。這樣,我們將節點的下一個指針用作標志來指示該節點是否已遍歷。檢查每個節點以查看下一個節點是否指向臨時節點。在循環的第一個節點的情況下,第二次遍歷該條件將成立,因此我們發現該循環存在。如果遇到一個指向null的節點,則循環不存在。
下面是上述方法的實現:

  1. #include <bits/stdc++.h> 
  2. using namespace std; 
  3.   
  4. struct Node { 
  5.     int key
  6.     struct Node* next
  7. }; 
  8.   
  9. Node* newNode(int key
  10.     Node* temp = new Node; 
  11.     temp->key = key
  12.     temp->next = NULL
  13.     return temp
  14. void printList(Node* head) 
  15.     while (head != NULL) { 
  16.         cout << head->key << " "
  17.         head = head->next
  18.     } 
  19.     cout << endl; 
  20. bool detectLoop(Node* head) 
  21.     Node* temp = new Node; 
  22.     while (head != NULL) { 
  23.         if (head->next == NULL) { 
  24.             return false
  25.         } 
  26.         if (head->next == temp) { 
  27.             return true
  28.         } 
  29.         Node* nex = head->next
  30.         head->next = temp
  31.         head = nex; 
  32.     } 
  33.   
  34.     return false
  35. int main() 
  36.     Node* head = newNode(1); 
  37.     head->next = newNode(2); 
  38.     head->next->next = newNode(3); 
  39.     head->next->next->next = newNode(4); 
  40.     head->next->next->next->next = newNode(5); 
  41.     head->next->next->next->next->next = head->next->next
  42.   
  43.     bool found = detectLoop(head); 
  44.     if (found) 
  45.         cout << "Loop Found"
  46.     else 
  47.         cout << "No Loop"
  48.   
  49.     return 0; 

復雜度分析:

時間復雜度: O(n)。
只需循環一次即可。

輔助空間: O(1)。
不需要空間。

解決方案5:存放長度

在此方法中,將創建兩個指針,第一個(始終指向頭)和最后一個指針。每次最后一個指針移動時,我們都會計算第一個和最后一個之間的節點數,并檢查當前節點數是否大于先前的節點數,如果是,我們通過移動最后一個指針進行操作,否則就意味著我們已經到達循環的終點,因此我們相應地返回輸出。

  1. #include <bits/stdc++.h> 
  2. using namespace std; 
  3.   
  4. struct Node { 
  5.     int key
  6.     struct Node* next
  7. }; 
  8.   
  9. Node* newNode(int key
  10.     Node* temp = new Node; 
  11.     temp->key = key
  12.     temp->next = NULL
  13.     return temp
  14. void printList(Node* head) 
  15.     while (head != NULL) { 
  16.         cout << head->key << " "
  17.         head = head->next
  18.     } 
  19.     cout << endl; 
  20. int distance(Node* first, Node* last
  21.     int counter = 0; 
  22.   
  23.     Node* curr; 
  24.     curr = first
  25.   
  26.     while (curr != last) { 
  27.         counter += 1; 
  28.         curr = curr->next
  29.     } 
  30.   
  31.     return counter + 1; 
  32. bool detectLoop(Node* head) 
  33.     Node* temp = new Node; 
  34.   
  35.     Node *first, *last
  36.     first = head; 
  37.     last = head; 
  38.     int current_length = 0; 
  39.     int prev_length = -1; 
  40.   
  41.     while (current_length > prev_length && last != NULL) { 
  42.           prev_length = current_length; 
  43.         current_length = distance(firstlast); 
  44.         last = last->next
  45.     } 
  46.       
  47.     if (last == NULL) { 
  48.         return false
  49.     } 
  50.     else {  
  51.         return true
  52.     } 
  53. int main() 
  54.     Node* head = newNode(1); 
  55.     head->next = newNode(2); 
  56.     head->next->next = newNode(3); 
  57.     head->next->next->next = newNode(4); 
  58.     head->next->next->next->next = newNode(5); 
  59.     head->next->next->next->next->next = head->next->next
  60.   
  61.     bool found = detectLoop(head); 
  62.     if (found) 
  63.         cout << "Loop Found"
  64.     else 
  65.         cout << "No Loop Found"
  66.   
  67.     return 0; 

} 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2017-05-04 20:15:51

iOSNSTimer循環引用

2023-10-29 00:55:44

2012-03-14 10:58:27

Java

2021-10-31 20:24:24

C++for循環

2011-06-16 09:28:02

C++內存泄漏

2024-10-07 08:26:05

編程Python異常處理

2015-06-10 13:49:53

2023-09-27 23:24:50

C++鏈表

2023-08-28 10:54:09

容器Docker

2009-09-28 10:09:09

Linux內核Linux循環鏈表

2023-11-03 07:58:54

CORSSpring

2010-01-27 16:05:06

C++堆棧

2010-01-21 09:34:57

C++語法

2011-03-04 13:07:47

Filezilla

2009-06-03 16:41:21

Eclipse亂碼Eclipse

2011-07-27 19:05:35

2025-03-19 08:40:00

2009-05-31 09:07:35

Oracle鎖定

2011-01-19 17:54:48

2009-12-29 10:24:51

Linux內核循環鏈表
點贊
收藏

51CTO技術棧公眾號

少妇一级黄色片| 欧美三级一级片| 99久久精品国产色欲| 国内久久精品| 亚洲欧美中文字幕在线一区| 色播五月激情五月| 俺来也官网欧美久久精品| 久久先锋资源网| 91中文字精品一区二区| 日本一级一片免费视频| 欧美aaaaaaaaaaaa| 亚洲第一黄色网| 中文字幕22页| 亚洲色图官网| 亚洲精品国产成人久久av盗摄| 久久九九视频| 国产成人免费看一级大黄| 媚黑女一区二区| 久久99精品久久久久久青青91| 欧美性猛交xxxx乱| 久久男人av| 日韩一区二区三区在线观看| 欧美 日韩 国产 激情| av老司机在线观看| 亚洲欧美电影一区二区| 日韩欧美在线观看强乱免费| 欧美一级在线免费观看 | 久久夜色精品国产亚洲aⅴ| 黄色性生活一级片| 88久久精品| 6080yy午夜一二三区久久| 日日摸日日碰夜夜爽av| 成人高潮aa毛片免费| 亚洲人吸女人奶水| 亚洲 国产 日韩 综合一区| 亚洲aaaaaaa| 成人精品鲁一区一区二区| 91日本在线视频| 在线观看色网站| 日韩和欧美一区二区三区| 91国产美女视频| 日韩在线观看第一页| 欧美69视频| 久热精品视频在线免费观看 | 无码国产伦一区二区三区视频| 国产成人在线看| 91青草视频久久| 99精品在线看| 福利电影一区二区三区| 97人人做人人人难人人做| 精品国产18久久久久久| 国产一区二区三区高清播放| 成人精品aaaa网站| 国产日韩欧美视频在线观看| 韩国成人在线视频| 91传媒视频免费| www.com欧美| 成人中文字幕合集| 国产欧美亚洲日本| 少妇荡乳情欲办公室456视频| 高清免费成人av| 国产精品免费在线| 亚洲av成人精品毛片| wwwwww.欧美系列| 日本成人三级电影网站| 国产在线黄色| 综合电影一区二区三区 | 免费网站在线高清观看| 波多野结衣在线观看一区二区三区| 国产亚洲精品久久久久久| 免费视频91蜜桃| 99久久国产综合精品成人影院| 久久网福利资源网站| 久久久久成人网站| 亚洲久久在线| 国产精品1234| 国产男女猛烈无遮挡| 福利视频网站一区二区三区| 美国av一区二区三区| 国产精品久久一区二区三区不卡 | 亚洲精品视频在线观看视频| 免费人成又黄又爽又色| 久久久久久久久久久妇女| 欧美日韩成人免费| 草久久免费视频| 毛片av一区二区| 99视频在线播放| 日本天堂在线| 亚洲日本在线a| 人妻精品无码一区二区三区| 欧美成人黄色| 精品88久久久久88久久久| 无码人妻丰满熟妇啪啪欧美| 亚洲欧美一级二级三级| 啪一啪鲁一鲁2019在线视频| 一级做a爱片性色毛片| 成人精品国产福利| 一区二区成人国产精品| h片在线观看下载| 欧美视频第二页| 久久久久亚洲AV成人网人人小说| 国产不卡av一区二区| 欧美成人一区在线| 樱花视频在线免费观看| 国产a视频精品免费观看| 欧美xxxx黑人又粗又长精品| 在线观看中文字幕的网站| 欧美性xxxxxxxxx| 手机看片国产精品| 国产亚洲欧美日韩在线观看一区二区| 欧美另类第一页| 国产乡下妇女三片| 99精品国产视频| 91成人在线视频观看| 唐人社导航福利精品| 精品国产91久久久久久久妲己| 色www亚洲国产阿娇yao| 国产欧美日韩一级| 5g影院天天爽成人免费下载| 日本精品一区二区三区在线播放| 精品久久久久人成| 欧美日韩一区二区区| 天天综合一区| 国产精品一区二区女厕厕| 日韩午夜影院| 亚洲成人tv网| 中文字幕人妻无码系列第三区| 欧美日韩精品在线一区| 欧美在线观看网址综合| www.久久久久久| 亚洲三级免费观看| 欧美成人三级在线播放| 国产成人调教视频在线观看| 欧美中文字幕精品| 婷婷视频在线观看| 亚洲成人资源在线| 国产乱淫av片| 欧美日一区二区三区在线观看国产免| 成人情趣片在线观看免费| 香蕉视频网站在线观看| 欧美日韩综合色| 91资源在线播放| 男人的j进女人的j一区| 婷婷精品国产一区二区三区日韩| 成人欧美大片| 国产一区二区日韩精品欧美精品| 国产亚洲欧美日韩高清| 国产日产欧美精品一区二区三区| 哪个网站能看毛片| 美女久久久久| 国产成人精品视| yiren22亚洲综合伊人22| 欧美午夜电影在线播放| 日本高清黄色片| 久草在线在线精品观看| 中文字幕一区二区三区有限公司 | 久久国产精品二区| 成人性生交大片免费| 成人性生活视频免费看| 免费观看成人www动漫视频| 91精品国产91久久久久久不卡| 天天综合天天色| 色综合色狠狠综合色| 人妻视频一区二区| 久久9热精品视频| 久久香蕉视频网站| 欧美日韩看看2015永久免费| 人人做人人澡人人爽欧美| 国产高清一级毛片在线不卡| 欧美日韩午夜在线| 超碰手机在线观看| 白白色亚洲国产精品| 国产女女做受ⅹxx高潮| 成人高清电影网站| 99r国产精品视频| 中文字幕21页在线看| 国产一区二区黑人欧美xxxx| 国产视频www| 五月婷婷欧美视频| 免费在线观看a视频| 国产剧情一区在线| 精品少妇人妻av免费久久洗澡| 国产精品片aa在线观看| 国产在线a不卡| 成人在线免费观看黄色| 亚洲日本成人女熟在线观看| 国产婷婷一区二区三区久久| 性欧美大战久久久久久久久| 纪美影视在线观看电视版使用方法| 国模无码大尺度一区二区三区| 免费人成自慰网站| 精品日韩毛片| 国产伦精品一区二区三区视频孕妇 | 国产淫片av片久久久久久| 99热在线成人| 精品视频一区二区| 日韩成人免费av| 97国产在线观看| 国产淫片在线观看| 亚洲精品天天看| 亚洲高清精品视频| 欧美日韩在线播| 中日韩黄色大片| 亚洲久草在线视频| 永久免费av无码网站性色av| kk眼镜猥琐国模调教系列一区二区| 亚洲高清免费在线观看| 国产日韩欧美三区| 在线一区日本视频| 国产伦一区二区三区| 国产高清精品一区| 四虎地址8848精品| 琪琪亚洲精品午夜在线| 男女在线观看视频| 久久偷看各类女兵18女厕嘘嘘 | 欧美—级在线免费片| 国产精品久久久久久亚洲色| 久久aⅴ国产欧美74aaa| av无码精品一区二区三区| 亚洲国产电影| 国产资源第一页| 国产精品久久观看| 日韩电影免费观看在| 欧美日韩破处| 国产精品一区二区不卡视频| 欧美一级大片在线视频| 国产精品老女人视频| 一个人www视频在线免费观看| 欧美国产视频日韩| 国产欧美黑人| 中文字幕在线看视频国产欧美| 欧美日韩在线中文字幕| 日韩av网址在线| 开心激情综合网| 日韩欧美一二三四区| 国产麻豆免费观看| 欧美人与z0zoxxxx视频| 在线观看国产精品视频| 欧美无乱码久久久免费午夜一区| 日本a级c片免费看三区| 色综合久久久久| 国产黄网在线观看| 日韩欧美在线免费| 中文字幕69页| 欧洲av一区二区嗯嗯嗯啊| 无码人妻久久一区二区三区 | 日韩精品免费| 先锋影音亚洲资源| 久久国产综合| 手机在线视频你懂的| 一区二区三区在线电影| 国产在线无码精品| 狠狠爱www人成狠狠爱综合网 | 国产精品久久久精品四季影院| 成人欧美一区二区三区黑人麻豆| 免费黄色激情视频| 亚洲免费在线观看| 国产91av视频| 日本韩国一区二区三区视频| 亚洲一卡二卡在线观看| 91麻豆精品国产91久久久资源速度| 精品国产九九九| 精品成人在线观看| 欧美精品少妇| 日韩中文字幕精品视频| 中中文字幕av在线| 91精品国产免费久久久久久| 成人自拍av| 91情侣偷在线精品国产| 女同久久另类99精品国产| 欧美精品久久久| 9999国产精品| 国产精品久久久久7777| 欧美综合二区| 亚洲18在线看污www麻豆| 大胆亚洲人体视频| 国产综合精品在线| 亚洲欧美色图小说| 久久久午夜影院| 欧美日韩免费在线视频| 欧美一级特黄aaaaaa| 一二美女精品欧洲| 少女频道在线观看免费播放电视剧| 91成人精品网站| 欧美aaa级| 精品卡一卡二| 国产精品国产一区| 成人久久久久久久久| 国产精品综合视频| 野外性满足hd| 亚洲精品高清视频在线观看| 五月婷婷激情视频| 91麻豆精品国产91久久久久 | 欧美成人亚洲成人| 我爱我色成人网| 国产精品国产精品国产专区不卡| 成人写真视频| av动漫在线看| 国产精品综合网| 亚洲图片第一页| 无码av免费一区二区三区试看| 在线观看国产一区二区三区| 日韩乱码在线视频| a在线免费观看| 国产精品美女免费| 日本国产精品| 成人区一区二区| 激情丁香综合五月| 亚洲自拍偷拍一区二区| 亚洲成人动漫在线观看| 99久久精品无免国产免费| 亚洲视频在线播放| 678在线观看视频| 99c视频在线| 91欧美日韩| www.激情小说.com| 久久久午夜电影| 中文字幕亚洲高清| 亚洲国产精品久久久久秋霞蜜臀| 国产一二区在线观看| 国产日韩av在线播放| 久操国产精品| 国产免费黄色av| 成人av电影在线| 国产一级一片免费播放放a| 欧美一区二区三区思思人 | 久久久久久这里只有精品| 国产在视频一区二区三区吞精| 日本一区二区三区视频在线播放| 日韩视频久久| av av在线| 亚洲一区二区三区免费视频| 国产wwwxxx| 插插插亚洲综合网| 国产美女精品视频免费播放软件| 亚洲一区高清| 国内久久精品视频| 午夜国产福利一区二区| 日韩一区二区三区精品视频| 青青影院在线观看| 国产色婷婷国产综合在线理论片a| 成人情趣视频网站| 高清一区在线观看| 中文字幕中文字幕在线一区| 一区二区三区亚洲视频| 久久九九亚洲综合| 日韩三级久久| 老太脱裤让老头玩ⅹxxxx| 91在线云播放| 无码人妻丰满熟妇精品| 中文字幕视频在线免费欧美日韩综合在线看 | 国产欧美精品日韩精品| 日韩国产欧美一区二区| 激情文学亚洲色图| 亚洲精品久久嫩草网站秘色| 成人小说亚洲一区二区三区| 8090成年在线看片午夜| 精品毛片免费观看| www.久久av.com| 亚洲综合在线视频| 色婷婷综合视频| 国产成人精品综合久久久| 欧美日韩色图| 熟妇无码乱子成人精品| 亚洲国产一区二区a毛片| 四虎成人免费在线| 国产精品视频内| 欧美在线播放| 国产偷人妻精品一区| 欧美亚洲国产一卡| 怡红院在线观看| 农村寡妇一区二区三区| 国产自产视频一区二区三区| 国产精品99re| 亚洲网在线观看| 久久久久九九精品影院| 蜜桃传媒一区二区三区| 国产欧美视频一区二区| www.黄色片| 国产a级全部精品| 欧美日本二区| 一道本在线观看| 日韩亚洲欧美在线| 另类激情视频| 18视频在线观看娇喘| 26uuu国产电影一区二区| 91亚洲国产成人久久精品麻豆| 久久久免费av| 欧美mv日韩| 一区二区视频观看| 欧美一区二区精品在线| 欧美magnet| av无码久久久久久不卡网站| 亚洲国产精华液网站w| 日本黄色免费视频| 国产在线久久久| 亚洲欧美久久久| 欧美日韩三级在线观看| 一区二区亚洲欧洲国产日韩| 高清精品视频|