什么是双向链表:
我们都知道单向链表中的每一个节点有且只有一个指针,这个指针就是用来指向下一个节点的,单向链表顾名思义就是链表方向是单方向的,而本文要介绍的双向链表就是链表方向是双方向的,也就是双向链表中的每一个节点有两个指针,一个指针用来指向上一个节点(前驱),另一个指针用指向下一个节点(后继)。
双向链表各种操作
头插法
代码实现
public void inserthead(int val){
Entry entry=new Entry(val);
entry.next=this.head.next;
entry.prio=this.head;
this.head.next=entry;
if(entry.next!=null){//没有判断的话,如果只有一个头结点的时候,会出现空指针异常,这个时候entry的后面是没有节点的,所以entry.next.prio是不存在的
entry.next.prio=entry;
}
尾插法:
//尾插法
public void inserttail(int val){
Entry entry=new Entry(val);
Entry cur =this.head;
while(cur.next!=null){
cur=cur.next;
}
entry.prio=cur;
cur.next=entry;
}
全部代码块
class Testlink{
Entry head;
public Testlink(){
this. head=new Entry();
}
class Entry{
int data;
Entry next;//后继
Entry prio;//前驱
public Entry(){
this.data=-1;
this.next=null;
this.prio=null;
}
public Entry(int data){
this.data=data;
this.next=null;
this.prio=null;
}
}
//头插法
public void inserthead(int val){
Entry entry=new Entry(val);
entry.next=this.head.next;
entry.prio=this.head;
this.head.next=entry;
if(entry.next!=null){//没有判断的话,如果只有一个头结点的时候,会出现空指针异常,这个时候entry的后面是没有节点的,所以entry.next.prio是不存在的
entry.next.prio=entry;
}
}
//打印
public void show(){
Entry cur=this.head.next;
while(cur!=null){
System.out.println("cur.data= "+cur.data+" ");
cur=cur.next;
}
}
//尾插法
public void inserttail(int val){
Entry entry=new Entry(val);
Entry cur =this.head;
while(cur.next!=null){
cur=cur.next;
}
entry.prio=cur;
cur.next=entry;
}
//删除val值
public void delete(int val){
Entry cur=this.head.next;
while(cur!=null){
if(cur.data==val){
cur.prio.next=cur.next;
if(cur.next!=null){
cur.next.prio=cur.prio;
}
}
cur=cur.next;
}
}
}
public class test2 {
public static void main(String[] args) {
Testlink t1= new Testlink();
for (int i=0;i<6;i++){
t1.inserttail(i);
}
t1.show();
System.out.println("====删除5后====");
t1.delete(5);
t1.show();
System.out.println("====尾部插入2后====");
t1.inserttail(2);
t1.show();
}
}
运行结果:
cur.data= 0
cur.data= 1
cur.data= 2
cur.data= 3
cur.data= 4
cur.data= 5
====删除5后====
cur.data= 0
cur.data= 1
cur.data= 2
cur.data= 3
cur.data= 4
====尾部插入2后====
cur.data= 0
cur.data= 1
cur.data= 2
cur.data= 3
cur.data= 4
cur.data= 2