- Schematic diagram of a doubly linked list:
- Create node inner class
class Entry{
int data;
Entry next;
Entry prio;
public Entry(){
this.data=-1;
this.next=null;
this.prio=null;
}
public Entry(int val){
this.data=val;
this.next=null;
this.next=null;
}
}
- head plug
public Entry head=null;//创建头结点
public DoubleLink(){
this.head=new Entry();
}
//头插法
public void insertHead(int val){
Entry entry=new Entry(val);//得到了一个结点
entry.next=head.next;
entry.prio=this.head;
this.head.next=entry;
if(entry.next!=null){//会有空指针异常,这个我还不懂
entry.next.prio=entry;
}
}
enter:
DoubleLink t1=new DoubleLink();
t1.insertHead(10);
t1.insertHead(10);
t1.insertHead(10);
t1.show();
Output:
View Analysis:
4. Tail interpolation
public void insertTail(int val){
Entry cur=this.head;
while(cur.next!=null){
cur=cur.next;
}
Entry entry=new Entry(val);
cur.next=entry;
entry.prio=cur.next.prio;
}
enter:
DoubleLink t1=new DoubleLink();
t1.insertTail(6);
t1.insertTail(66);
t1.insertTail(666);
t1.show();
output:
View analysis:
5. Delete all nodes whose value is val
public void deleteEntry(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;
}
}
enter:
DoubleLink t1=new DoubleLink();
t1.insertTail(6);
t1.insertTail(66);
t1.insertTail(666);
t1.show();
t1.deleteEntry(66);
t1.show();
output:
View Analysis: