1. 程式人生 > >單向連結串列判斷是否存在迴圈

單向連結串列判斷是否存在迴圈

方法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;
}