單向連結串列判斷是否存在迴圈
阿新 • • 發佈:2019-02-15
方法1:單鏈表判斷是否存在迴圈,即判斷是否有兩個指標指向同一位置,即判斷海量指標中是否有相同資料。然後對所有指標選擇插入排序或者快速排序。
方法2:設定兩個指標互相追逐。一個指標每次前進一步,第二個指標每次前進兩步,如果有相遇,則說明有環。
評論:
1、方法1演算法效率不高,時間複雜度是O(n^2)或者O(nlogn),空間複雜度是O(n),未利用迴圈表的特性
2、方法2的時間複雜度和空間複雜度分別是O(n)和O(1)。較方法1的優勢是,不需要事先知道連結串列有多大,利用了迴圈表的特性
方法2程式碼:
bool isCycle(node *head) { node *p = head->next; node *q = p; while ( (p!=NULL) && (q!=NULL) && (q->next!=NULL) ) { p = p->next; q = q->next->next; if ( p == q ) { return true; } } return false; }