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(); } }