package helloclean.dlink;
public class DLink {
public String data;
public DLink next;
public DLink previous;
public DLink(String data) {
this.data = data;
}
public void show() {
System.out.print(this.data + " ");
}
}
package helloclean.dlink;
public class DoubleLinkList {
private DLink first;
private DLink last;
public DoubleLinkList() {
first = null;
last = null;
}
public boolean isEmpty() {
return (first == null);
}
public void inserFirst(String key) {
DLink node = new DLink(key);
if(isEmpty()) {
last = node;
} else {
first.previous = node;
}
node.next = first;
first = node;
}
public void inserLast(String key) {
DLink node = new DLink(key);
if(isEmpty()) {
first = node;
} else {
last.next = node;
node.previous = last;
}
last = node;
}
public DLink deleteFirst() {
DLink temp = first;
if(first.next == null) {
last = null;
} else {
first.next.previous = null;
}
first = first.next;
return temp;
}
public DLink deleteLast() {
DLink temp = last;
if(first.next == null) {
first = null;
} else {
last.previous.next = null;
}
last = last.previous;
return temp;
}
public boolean insertAfter(String key , String dd) {
DLink current = first;
while (!current.data.equals(key)) {
current = current.next;
if(current == null) {
return false;
}
}
DLink node = new DLink(dd);
if(current == last) {
node.next = null;
last = node;
} else {
node.next = current.next;
current.next.previous = node;
}
node.previous = current;
current.next = node;
return true;
}
public DLink deleteKey(String key) {
DLink current = first;
while (!current.data.equals(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 showForward() {
System.out.println("first -> last : ");
DLink current = first;
while (current != null) {
current.show();
current = current.next;
}
System.out.println();
}
public void showBack() {
System.out.println("last -> first : ");
DLink current = last;
while (current != null) {
current.show();
current = current.previous;
}
System.out.println();
}
}
package helloclean.dlink;
public class App {
public static void main(String[] args) {
DoubleLinkList doubleLinks = new DoubleLinkList();
doubleLinks.inserFirst("1");
doubleLinks.inserFirst("2");
doubleLinks.inserFirst("3");
doubleLinks.inserLast("4");
doubleLinks.inserLast("5");
doubleLinks.inserLast("6");
doubleLinks.showForward();
doubleLinks.showBack();
doubleLinks.deleteFirst();
doubleLinks.deleteLast();
doubleLinks.deleteKey("1");
doubleLinks.showForward();
doubleLinks.insertAfter("2","3");
doubleLinks.insertAfter("5","6");
doubleLinks.showForward();
doubleLinks.showBack();
}
}
文章来源: www.oschina.net,作者:clean123,版权归原作者所有,如需转载,请联系作者。
原文链接:https://my.oschina.net/u/4118445/blog/3112514