public class DubbleLinkList {
private Node head=null;
public void addNode(Node node){
if(node==null){
return;
}
if(null==head){
head=node;
return;
}
if(head.getNext()==null){
head.setNext(node);
node.setPrev(head);
return;
}
Node temp=head.getNext();
while (true){
if(temp.getNext()==null){
break;
}
temp=temp.getNext();
}
temp.setNext(node);
node.setPrev(temp);
}
public boolean isEmpty(){
return head==null;
}
public void printList(){
if(this.isEmpty()){
return;
}
Node temp=head;
while (true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.getNext();
}
}
public void printReverserList(){
if(this.isEmpty()){
return;
}
if(head.getNext()==null){
System.out.println(head);
return;
}
Node last=head;
while (true){
if(last.getNext()==null){
break;
}
last=last.getNext();
}
Node prev=last;
while (true){
if(prev==null){
break;
}
System.out.println(prev);
prev=prev.getPrev();
}
}
public void updateNode(Node oldNode,Node newNode){
Node temp=head;
if(isEmpty()){
return;
}
while (true){
if(temp==oldNode){
break;
}
if(temp==null){
break;
}
temp=temp.getNext();
}
if(temp==null){
return;//没找到
}
if(head==oldNode){
newNode.setNext(head.getNext());
head.getNext().setPrev(newNode);
head=newNode;
return;
}
newNode.setNext(temp.getNext());
temp.getNext().setPrev(newNode);
temp.getPrev().setNext(newNode);
newNode.setPrev(temp.getPrev());
}
public void delNode(Node node){
if(isEmpty()){
return;
}
Node temp=head;
while (true){
if(temp==node){
break;
}
if(temp==null){
break;
}
temp=temp.getNext();
}
if(temp==null){
return;
}
if(temp.getNext()==null){ //最后一个了
if(temp.getPrev()==null){
//只有一个head节点
head=null;
return;
}
//最后一个
Node prev = temp.getPrev();
prev.setNext(null);
node.setPrev(null);
return;
}
Node next = temp.getNext();
Node prev = temp.getPrev();
prev.setNext(next);
next.setPrev(prev);
temp.setPrev(null);
temp.setNext(null);
}
public static void main(String[] args) {
Node yang = new Node(1, "yang");
Node xiao = new Node(1, "xiao");
Node hui = new Node(1, "hui");
Node yun = new Node(2, "yun");
DubbleLinkList linkList = new DubbleLinkList();
linkList.addNode(yang);
linkList.addNode(xiao);
linkList.addNode(hui);
linkList.printList();
System.out.println("逆向da打印");
linkList.updateNode(xiao,yun);
linkList.printReverserList();
System.out.println("删除节点开始。。。。。。。。。");
linkList.delNode(hui);
linkList.delNode(yun);
linkList.delNode(yang);
linkList.printList();
}
}