java實現鏈表

    今天和同學討論時,他說java沒有指針怎麼實現鏈表。的確,在Java中沒有指針。但是,Java中引用和C++中的引用有很大不同,而且具有一定指針的功能(過兩天會總結)。所以,就在家用Java實現了一下鏈表這種數據結構。目前我想到了兩種方法用Java實現鏈表:

        1、Java允許類的定義中出現該類對象,所以可以通過對該類對象的引用實現鏈表。

        2、可以通過定義一個基類,通過子類的向上轉型。通過父類指針模擬C++中的指針類型,從而實現鏈表。

廢話不多說,上代碼:

    方法1 Node.java:

package com.pasilo;

public class Node {
	
	private int data;
	private Node next;
	
	public Node(){}
	
	public Node(int data){
		this.data = data;
		this.next = new Node();
	}
	
	public int getData(){
		return this.data;
	}
	
	public void setData(int value){
		this.data = value;
	}
	
	public Node getNext(){
		return this.next;
	}
	
	public void setNewNext(int value){
		Node newNode = new Node(value);
		this.next = newNode;
	}
	
	public void setNext(Node node){
		this.next = node;
	}
}

    方法1 List.java:

package com.pasilo;

public class List {
	
	private Node head;
	private Node current;
	
	public List(int data){
		this.head = new Node(data);
		current = head;
	}
	
	public void append(int value){
		current.setNewNext(value);
		current = current.getNext();
	}
	
	public void remove(int destation){
		Node pointer = this.head;
		for(int i=0;i<destation-1;i++){
			pointer = pointer.getNext();
		}
		Node temp = pointer.getNext().getNext();
		pointer.setNext(temp);
	}
	
	public void insert(int destation,int value){
		Node pointer = this.head;
		for(int i=0;i<destation-1;i++){
			pointer = pointer.getNext();
		}
		Node temp = pointer.getNext();
		Node newNode = new Node(value);
		pointer.setNext(newNode);
		newNode.setNext(temp);
	}
	
	public int at(int index){
		Node pointer = this.head;
		for(int i=0;i<index;i++){
			pointer = pointer.getNext();
		}
		return pointer.getData();
	}
	
	public void display(){
		Node pointer = this.head;
		while(current != pointer){
			System.out.println("data is:"+pointer.getData());
			pointer = pointer.getNext();
		}
		System.out.println("data is:"+pointer.getData());
		System.out.println("this is the end.");
	}
	
	public int size(){
		int size = 1;
		Node pointer = this.head;
		while(current != pointer){
			pointer = pointer.getNext();
			size++;
		}
		return size;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list = new List(4);
		list.append(4);
		list.append(1);
		list.append(2);
		list.insert(2, 10);
		list.display();
		list.remove(2);
		list.display();
		System.out.println(list.at(2));
		System.out.println("size of the list:"+list.size());
	}

}

未完待續..........

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章