java 自定義一個LinkedList,實現其部分方法

package test;

/**
 * 自定義一個LinkList
 * @author YU
 *
 */

public class MyLinkedList <E> {
	private Node first;
	private Node last;
	private int size;
	
	int size() { //返回鏈表長度
		return size;
	}
	boolean isEmpty() {  //鏈表是否爲空
		return size==0?true:false;
	}
	public void reset(E obj,int index) {  //修改節點的值
		checkIndexRange(index);
		Node temp = locate(index);
		temp.element = obj;
	}
	
	public void insert(E obj,int index) { //指定索引處插入節點
		checkIndexRange(index);
		Node temp = locate(index);
		Node newElement = new Node(obj);

		temp.previous.next = newElement;
		temp.previous = newElement;
		newElement.next = temp;
		newElement.previous = temp.previous;
		size++;
	}
	public E get(int index) {  //獲取指定索引處的節點值
		checkIndexRange(index);
		Node temp = locate(index);
		return (E) temp.element;
	}
	
	public void add(E obj) {  //增加鏈表節點
		Node node = new Node(obj);
		size++;
		if(first==null) {
			first=node;
			last=node;
		}else {
			last.next=node;
			node.next=first;
			node.previous=last;
			first.previous=node;
			last=node;
		}
	}
	
	public void remove(E obj) {  //根據值 刪除指定節點
		Node temp = first;
		int i=0;
		while(!temp.element.equals(obj)) {
			temp = temp.next;
			i++;
		}
		remove(i);
	}
	public void remove(int index) {  //根據索引 刪除節點
		checkIndexRange(index);
		Node temp = locate(index);
		temp.previous.next = temp.next;
		temp.next.previous = temp.previous;
		temp = null;
		size--;
	}

	
	@Override
	public String toString() {  //重寫toString方法
		StringBuilder  str = new StringBuilder();
		str.append("[");
		Node temp = first;
		while(temp!=last) {
			str.append(temp.element+",");
			temp = temp.next;
			if(temp==last) {
				str.append(temp.element+"]");
			}
		}
		return str.toString();
	}
	public void checkIndexRange(int index) {  //判斷索引是否越界
		if(index<0||index>size-1) {
			throw new RuntimeException("索引越界:"+index);
		}
	}
	public Node locate(int index) {  //定位到指定索引處的節點
		Node temp = first;
		while(index--!=0) {
			temp = temp.next;
		}
		return temp;
	}
	
	
	public static void main(String[] args) {
		MyLinkedList<String> my = new MyLinkedList<String>();
		my.add("aa");
		my.add("bb");
		my.add("cc");
		my.add("dd");
		my.add("ee");
		my.add("ff");
		my.add("gg");
		my.add("hh");
		my.add("ii");
		my.reset("99", 4);
		System.out.println(my);
		System.out.println(my.size());
		System.out.println(my.get(3));
		System.out.println("####################");
		my.remove(3);
		System.out.println(my);
		System.out.println(my.size());
		System.out.println(my.get(3));
		System.out.println("####################");
		my.remove("99");
		System.out.println(my);
		System.out.println(my.size());
		System.out.println(my.get(3));
	}
}


class Node{
	Node previous;
	Node next;
	Object element;
	 
	public Node(Node previous, Node next, Object element) {
		super();
		this.previous = previous;
		this.next = next;
		this.element = element;
	}

	public Node(Object element) {
		super();
		this.element = element;
	}	
}

 

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