天天看点

java双向链表查找_JAVA带表头的双向链表插入,删除,查找操作

public classLinkedlist {publicNode head;//指向表头地址的引用public intlength;publicLinkedlist(){//建立头结点

length=0;

head=newNode();

head.data=0;

head.left=null;

head.right=null;

}public boolean Insert(intpos,Node node) {//在下标为pos-1和pos的结点之间插入node结点int count=0;

Node preNode=head;while(preNode!=null&&count

preNode=preNode.right;

}if(preNode==null||count!=pos-1){return false;

}if(preNode.right==null) {

preNode.right=node;

node.left=preNode;

node.right=null;++length;return true;

}

Node nextNode=preNode.right;

node.right=nextNode;

node.left=preNode;

preNode.right=node;

nextNode.left=node;++length;return true;

}public boolean Delete(intpos) {//删除指定位置的结点if(pos<0||pos>=length) {return false;

}int count=0;

Node curNode=head;while(count!=pos&&curNode!=null) {++count;

curNode=curNode.right;

}if(count!=pos||curNode==null) {return false;

}if(curNode.right==null) {

curNode.left.right=null;

curNode=null;

}if(curNode.right!=null) {//前

curNode.left.right=curNode.right;

curNode.right.left=curNode.left;

}--length;return true;

}public intSize() {//返回链表元素个数returnlength;

}public booleanisEmpty() {if(length==0) {return true;

}return false;

}public booleanTraverse() {//输出链表

Node preNode=head;while(preNode.right!=null) {

preNode=preNode.right;

System.out.print(preNode.data+" ");

}return true;

}public int getData(intpos) {//取得指定位置结点元素

Node preNode=head;int count=0;while(count!=pos) {

preNode=preNode.right;++count;

}returnpreNode.data;

}public booleanDelete(Node node) {//删除node结点

Node curNode=head;while(curNode!=node&&curNode!=null) {

curNode=curNode.right;

}if(curNode!=node) {return false;

}if(curNode.right!=null) {

curNode.left.right=curNode.right;

curNode.right.left=curNode.left;--length;return true;

}if(curNode.right==null) {

curNode.left.right=null;--length;return true;

}return false;

}

}