一、双向链表是什么
双向链表也叫双向表,是链表的一种,它由多个节点组成,每个节点都由一个数据域和两个指针域组成,数据与用来存储数据,其中一个指针域用来指向其后继结点,另一个指针域用来指向前驱结点,链表的头结点数据与不存储数据,指向前驱结点的指针域值为null,指向后继结点的指针域指向第一个真正存储数据的结点。
总的来说,双向链表和单项链表比较类似,不过多了一个指针域,用来指向前驱结点
下面看下双向链表的建立已经各种功能的实现
二、代码的实现
2、1 头结点的创建
//头结点
private Node head;
//最后一个结点
private Node end;
//链表的长度
public int N;
首先,创建一个头结点,和最后一个结点,申请一个公共变量N用来记录链表的结点数
然后我们开始写一个内部类进行方法的书写
2、2内部类的建立
//结点类
private class Node{
public Node(T item,Node pre,Node next){
this.item=item;
this.next=next;
this.pre=pre;
}
//存储数据
public T item;
//指向上一个结点
public Node pre;
//指向下一个结点
public Node next;
}
内部类和方法完成后,我们就可以进行链表各种功能的实现
2、3链表的初始化
public DoubleLinklist(){
//初始化头结点和尾结点
this.head=new Node(null,null,null);
this.end=new Node(null,null,null);
//初始化元素个数
this.N=0;
}
我们创建一个方法初始化我们的头结点和尾结点,事实上,头结点的数据域和指向上一个结点的指针域本身就为null,尾结点指向下一个结点的指针域也为null
同时我们让我们用来记录链表长度的N赋值为0
2、4清空链表
public void clear(){
this.head.next=null;
this.end.pre=null;
this.end.item=null;
this.N=0;
如上面所说,我们想要清空链表,只要把头结点指向下一个结点的指针域和尾节点指向上一个结点的指针域和本身的数据域为null即可
2、5获取链表的长度
//获取链表长度
public int length(){
return N;
}
这个不用多说,直接返回N就行
2、6判断链表是否为空