java实现双向链表

public class Link {
	public long dData;
	public Link next;
	public Link previous;
	public Link(long dData){
		this.dData = dData;
	}
	public void displayLink(){
		System.out.print(dData+" ");
	}
}
public class DoublyLinkedList {
	private Link first;
	private Link last;

	public DoublyLinkedList() {
		first = null;
		last = null;
	}

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

	public void insertFirst(long dd) {
		Link newLink = new Link(dd);
		if (isEmpty()) {
			last = newLink;
		} else {
			first.previous = newLink;
		}
		newLink.next = first;
		first = newLink;
	}

	public void insertLast(long dd) {
		Link newLink = new Link(dd);
		if (isEmpty()) {
			first = newLink;
		} else {
			last.next = newLink;
			newLink.previous = last;
		}
		last = newLink;
	}

	public Link deleteFirst() {
		Link temp = first;
		if (first.next == null) {
			last = null;
		} else {
			first.next.previous = null;
		}
		first = first.next;
		return temp;
	}

	public Link deleteLast() {
		Link temp = last;
		if (last.previous == null) {
			first = null;
		} else {
			last.previous.next = null;
		}
		last = last.previous;
		return temp;
	}

	public boolean insertAfter(long key, long dd) {// 插入指定项后面
		Link current = first;
		while (current.dData != key) {
			current = current.next;
			if (current == null)
				return false;// 退出方法,表示没有插入成功
		}

		Link newLink = new Link(dd);
		if (current == last) {
			newLink.next = null;
			last = newLink;
		} else {
			newLink.next = current.next;
			current.next.previous = newLink;
		}
		newLink.previous = current;
		current.next = newLink;
		return true;
	}

	public Link deleteKey(long key) {// 删除指定数据项(从头删除)
		Link current = first;
		while (current.dData != key) {
			current = current.next;
			if (current == null)
				return null;// 退出方法,没有找到
		}
		if (current == first) {// 删除的数据项第一个
			first = current.next;
		} else {
			current.previous.next = current.next;
		}
		if (current == last) {
			last = current.previous;
		} else {
			current.next.previous = current.previous;
		}
		return current;
	}

	public void displayForward() {// 从前向后显示
		System.out.print("List(first-->last):");
		Link current = first;
		while (current != null) {
			current.displayLink();
			current = current.next;
		}
		System.out.println();
	}

	public void displayBackward() {// 从后向前显示
		System.out.print("List(last-->first):");
		Link current = last;
		while (current != null) {
			current.displayLink();
			current = current.previous;
		}
		System.out.println();
	}
}

猜你喜欢

转载自1084647490.iteye.com/blog/2316245