1. 程式人生 > 程式設計 >四、迴圈連結串列和雙向連結串列

四、迴圈連結串列和雙向連結串列

一、什麼是迴圈連結串列?

迴圈連結串列的結構其實就是在普通單連結串列的結構上讓頭結點和尾結點連線起來,形成一個環,因此被稱為迴圈連結串列。下圖給出其邏輯結構:
複製程式碼

所以,迴圈連結串列其實也很簡單,只是在普通單連結串列的基礎上維護尾結點指向頭結點就可以了。

二、迴圈連結串列的實現

迴圈連結串列的API
void addFirst(E e);
void addLast(E e);
E removeFirst();
E removeLast();
boolean remove(E e);
boolean contains(E e);
複製程式碼

程式碼實現如下:

addFirst方法: 新建立一個連結串列結點,讓其next域指向head的next域,然後讓head的next指向新建立的結點,同時維護size++,最後需要注意的是如果當加入第一個結點時需要維護tail結點的指向。
addLast方法: 很簡單就不贅述了。
removeFirst方法:
removeLast方法: removeLast方法比較麻煩,因為它刪除尾部結點時需要知道它前一個結點,因此需要遍歷迴圈連結串列,時間複雜度為O(n)。
remove(E e)方法:
contains(E e)和toString()方法:

三、什麼是雙向連結串列?

雙向連結串列其實就是在單連結串列的基礎上,對每一個結點增加一個指標域,讓其指向前一個結點。
複製程式碼

邏輯結構如下:

程式碼實現如下: