資料結構之迴圈連結串列

Galois發表於2020-10-09

對於單連結串列,由於每個結點只儲存了向後的指標,到了尾標誌就停止了向後鏈的操作,這樣,當中某一結點就無法找到它的前驅結點了。

迴圈連結串列

將單連結串列中終端結點的指標端由空指標改為指向頭結點,就使整個單連結串列形成一個環,這種頭尾相接的單連結串列稱為單迴圈連結串列,簡稱迴圈連結串列(circular linked list)。
為了使空連結串列與非空連結串列處理一致,通常設一個頭結點。

空迴圈連結串列

GWklxu3y9k.png!large

非空迴圈連結串列

3ukhWns9n7.png!large

其實迴圈連結串列和單連結串列的主要差異就在於迴圈的判斷條件上,原來是判斷 p->next 是否為空,現在則是 p->next 不等於頭結點,則迴圈結束。
在單連結串列中,有頭結點時,可以用 O(1) 的時間訪問第一個結點,但對於要訪問到最後一個結點,卻需要 O(n) 時間,因為需要將單連結串列全部掃描一遍。

用指向終端結點的尾指標來表示迴圈連結串列,此時查詢開始結點和終端結點都很方便了。

lurC0Eq8mx.png!large

終端結點用尾指標 rear 指示,則查詢終端結點是 O(1),而開始結點其實就是 rear->next->next,其時間複雜度也是 O(1)。

案例:將兩個迴圈列表合併成一個表
JJfNv0GXfN.png!large
上圖中,他們的尾指標分別是 rearA 和 rearB。
G4ItYZfovo.png!large
上圖的步驟完成了兩個表的合併。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章