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