手動實現單向鏈表跟雙向鏈表的一個簡單demo

首先實現一個單向鏈表

 

先定義一個class,結構以下java

public class LinkedDemo {

	//當前對象id
	public int id;
	//鏈表下個節點引用
	public LinkedDemo next;


	public LinkedDemo(int id) {
		this.id = id;
	}
}

 

在定義一個測試方法,進行測試鏈表的添加測試

public static void main(String[] args){
		//建立鏈表頭
		LinkedDemo first = new LinkedDemo(1);
		//指向下一個節點的引用
		first.next = new LinkedDemo(2);


		System.out.println(first.id);
		System.out.println(first.next.id);
		

	}

 

發現會打印1跟2,說明鏈表成功了,this

 

將頭結點的參數,指向下一個結點,構建關聯關係,就造成了鏈表spa

 

若是咱們須要添加一個在節點2前,增長一個節點,增長如下代碼:code

/**
		 * 第二個節點前,插入一個新的節點
		 */
		LinkedDemo three = new LinkedDemo(3);
		three.next = first.next;
		first.next = three;

		System.out.println(first.id);
		System.out.println(first.next.id);
		System.out.println(first.next.next.id);

 

把頭節點的參數,指向新的節點,新的節點的參數,指向之前頭結點參數指向的節點對象

 

------------------------------------分割線-------------------------------------three

 

下面實現雙向列表,其實就是增長一個上個結點的引用而已

 

public class DoubleLinkedDemo {
    //id
	public int id;
    //上個結點的引用
	public DoubleLinkedDemo previous;
    //下個結點的引用
	public DoubleLinkedDemo next;

	public DoubleLinkedDemo(int id) {
		this.id = id;
	}
}

 

而後進行雙向鏈表關聯測試:io

/**
		 * 雙向鏈表
		 * 節點一(也能夠叫節點頭)
		 */
		DoubleLinkedDemo one = new DoubleLinkedDemo(1);


		/**
		 * 節點二
		 */
		DoubleLinkedDemo two = new DoubleLinkedDemo(2);

		//two的上一個節點是first
		two.previous = one;
		//first下一個節點是two
		one.next = two.previous;

 

能夠發現,節點二的previous屬性指向告終點一,結點一的next屬性指向告終點二,若是還有結點三,也是如上,操做就行了,假如是刪除結點,只須要砍掉跟上下結點的關聯關係,上下結點,從新關聯上就能夠了class

後面補圖!引用

 

 

歡迎轉載,請註明出處跟做者,謝謝!

相關文章
相關標籤/搜索