java实现双端链表

PS:双端链表(持有对最后一个节点的引用,允许表尾操作与表头操作等效的功能)

public class DoubleLinkedList {
	//节点类
        static class Node {
		public Object data;
		public Node next;

		public Node(Object dd) {
			data = dd;
		}

		@Override
		public String toString() {
			return String.valueOf(data);
		}
	}

	public Node head;//头结点
	public Node tail;//尾节点

	public DoubleLinkedList() {
		head = null;
		tail = null;
	}

	public boolean isEmpty() {
		return (head == null);
	}

	// 表头插入
	public void insertFirst(double dd) {
		Node newLink = new Node(dd);
		if (isEmpty()) {// 第一次插入节点
			tail = newLink;
		}
		newLink.next = head;
		head = newLink;
	}

	// 表尾插入
	public void insertLast(double dd) {
		Node newLink = new Node(dd);
		if (isEmpty()) {
			head = newLink;
		} else {
			tail.next = newLink;
		}
		tail = newLink;
	}

	// 删除表头
	public void deleteFirst() {
		head = head.next;
		if (head.next == null) {
			tail = null;
		}
	}

	public void displayList() {
		System.out.print("List (first--->last)");
		Node current = head;
		while (current != null) {
			System.out.print(current.data + " ");
			current = current.next;
		}
		System.out.println();
	}

	public static void main(String[] args) {
		DoubleLinkedList linkedList = new DoubleLinkedList();
		for (int i = 0; i <= 30; i += 5) {
			// 头插
			linkedList.insertFirst(i);
		}
		System.out.println("头插");
		linkedList.displayList();
		// 删除表头数据
		linkedList.deleteFirst();
		linkedList.displayList();
		linkedList = new DoubleLinkedList();
		for (int i = 0; i <= 30; i += 5) {
			// 尾插
			linkedList.insertLast(i);
		}
		System.out.println("尾插");
		linkedList.displayList();
		linkedList.deleteFirst();
		linkedList.displayList();
	}
}    

  

posted @ 2014-04-19 19:16  狂奔蚂蚁  阅读(191)  评论(0编辑  收藏  举报