双向链表
在单链表的基础上增加了头指针,可以指向前驱结点,所存储过程中便利很多,可以访问上一个结点。
在使用过程中,插入结点的操作为:
首先先通过遍历结点,找到其位置的前结点pnode.next,然后再进行连接,大致与单链表相同,
但最好按照这样的顺序:
dNode.next=pnode.next.next;
dNode.pre=pnode.next;
pnode.next.next=dNode;
pnode.next.next.pre=dNode;
删除操作大致相同:
pnode.next.next=pnode.next.next.next;
pnode.next.next.pre=pnode.next;
全部代码如下:
package List;
import java.awt.dnd.DnDConstants;
import java.security.cert.PolicyNode;
class DNode extends Node{
DNode next;
DNode pre;
public DNode(Object data) {
this.setData(data);
}
public DNode(){}
}
public class dlinkedlist {
DNode rnode;
DNode root;
public void dlinkedlist_init(){
root=new DNode();
rnode=new DNode();
root.next=null;
root.pre=null;
root.setData(null);
rnode.next=root;
}
public void dlinkedlist_insert(Object data){
//顺序添加,不在指定插入
DNode dNode=new DNode(data);
dNode.next=null;
dNode.pre=rnode.next;
rnode.next.next=dNode;
System.out.println("dNode.pre.getData():"+dNode.pre.getData()+",dNode.getData():"+ dNode.getData());
rnode.next=dNode;
}
public void dlinkedlist_insert(int n,Object data){
DNode dNode=new DNode(data);
DNode pnode=new DNode();
pnode.next=root;
int i=1;
while (i<=n-1){
pnode=pnode.next;
i++;
}if(pnode.next.next!=null){
dNode.next=pnode.next.next;
dNode.pre=pnode.next;
pnode.next.next=dNode;
pnode.next.next.pre=dNode;
System.out.println("dNode.getData():"+dNode.getData());
System.out.println("dNode.pre.getData():"+dNode.pre.getData());
System.out.println("dNode.next.getData():"+dNode.next.getData());
}
else {
dNode.next=null;
dNode.pre=rnode.next;
pnode.next.next=dNode;
System.out.println("dNode.getData():"+dNode.getData());
System.out.println("dNode.pre.getData():"+dNode.pre.getData());
}
}
public void delete(int n){
DNode pnode=new DNode();
pnode.next=root;
int i=1;
while (i<=n-1){
pnode=pnode.next;
i++;
}
System.out.println("删除的结点数据为;"+pnode.next.next.getData());
pnode.next.next=pnode.next.next.next;
pnode.next.next.pre=pnode.next;
}
public void print(){
DNode dNode=new DNode();
dNode.next=root;
while (dNode.next.next!=null){
System.out.println(dNode.next.next.getData());
dNode=dNode.next;
}
}
public static void main(String[] args){
dlinkedlist dl=new dlinkedlist();
dl.dlinkedlist_init();
dl.dlinkedlist_insert(1);
dl.dlinkedlist_insert(2);
dl.dlinkedlist_insert(3,3);
dl.print() ;
dl.delete(2);
dl.print() ;
}
}
运行结果: