1. 程式人生 > >線性表——迴圈連結串列

線性表——迴圈連結串列

迴圈連結串列的簡介

迴圈連結串列本質上和單鏈表並沒有什麼不同,準確的說迴圈連結串列就是特殊的單鏈表。

單鏈表:除了頭結點和尾結點每個節點都有且僅有一個前驅和後繼。

迴圈連結串列:每一個結點都有且僅有一個前驅和後繼。

迴圈連結串列的特點

不管從任一節點開始,都能遍歷整個連結串列

迴圈連結串列的基本操作

1.建立迴圈連結串列

從圖中我們可以看到迴圈連結串列的尾節點直接指向了頭結點,所以建立迴圈連結串列遵循此規律即可。

在這裡我們稍微修改一下,不用頭指標,改用尾指標,這樣子不管是頭結點還是尾節點我們都可以很方便的找到,而不用遍歷整個連結串列。

2.增加元素

增加元素和單鏈表相同,只需要改變指標即可,我們現在有尾指標,可以直接定位到尾節點,將新結點插在尾節點後面即可。

3.刪除元素

從頭結點開始遍歷,直到找到需要刪除的結點,修改指標域即可,但要注意若是刪除的結點剛好是尾節點需要將尾指標往前移動一下。

/**
 * 結點類 
 */
class Entry<T>{
	/**
	 * 資料域
	 */
	T data;
	/**
	 * 指標域
	 */
	Entry next;
	
	public Entry(){
		this.data = null;
		this.next = null;
	}
	
	public Entry(T data,Entry<T> next){
		this.data = data;
		this.next = next;
	}
	
	public Entry(T data){
		this.data = data;
	}
}
/**
* 連結串列類 
*/
class CycleLink<T>{
	/**
	 * 頭結點
	 */
	Entry<T> head = null;
	/**
	 * 尾指標
	 */
	Entry<T> last = null;
	/**
	 * 連結串列長度
	 */
	int size;
	
	public CycleLink(){
		head = new Entry();
		head.next = head;
		last = head;
		size = 0;
	}
	/**
	 * 增加元素 
	 */
	public void add(T data){
		Entry<T> node = new Entry(data);
		node.next = last.next;
		last.next = node;
		last = node;
		size++;
	}
	/**
	 * 刪除元素
	 */
	public void delete(T data){
		Entry p1 = head;
		Entry p2 = head.next;
		while(p2 != head){
			if(p2.data == data){
				if(p2 == last){//判斷此節點是不是尾節點,如果是,還需要移動尾指標。
					last = p1;
				}
				p1.next = p2.next;
			}
			p1 = p2;
			p2 = p2.next;
            size--;    
		}
	}
	public void show(){
		Entry p = head.next;
		while(p != head){
			System.out.print(p.data+" ");
			p = p.next;
		}
		System.out.println();
	}
}
public class Demo6 {
	public static void main(String[] args) {
		CycleLink<Integer> link = new CycleLink<Integer>();
		link.add(84);    link.add(45);    link.add(75);
		link.add(15);    link.add(29);    link.add(11);
		link.add(23);    link.add(29);    link.add(7);
		link.show();           link.delete(29);    
        link.show();           link.delete(11);
		link.show();           link.delete(7);
		link.show();
	}

}

執行結果

84 45 75 15 29 11 23 29 7 
84 45 75 15 11 23 7 
84 45 75 15 23 7 
84 45 75 15 23