1.双向链表
1.1双向链表的定义
双向链表也叫双链表,是链表的一种。它的每个数据节点中都有两个引用。分别指向直接前驱和直接后继。所以从双向链表的任意一个节点开始,都可以很方便的访问它的前驱节点和后继节点。
1.2双向链表示意图
1.3双向链表增删改查思路
双向链表比单向链表多了一个指向前一个节点的指针。
1.3.1尾部插入节点
(1)定义双向链表的最后一个节点即tailEntry;
(2)使tailEntry.next指向要插入的节点。
(3)使要插入节点的前驱节点指向tailEntry。
(4)更新tailEntry指向新尾巴。
1.3.2头部插入节点
(1)定位链表头headEntry标记;
(2)使得要插入节点的next指针指向headEnrty;
(3)使得headEnrty的前驱指向要插入的节点;
(4)更新新头部,headEntry指向要插入的节点。
1.3.3删除节点
(1)直接找到要删除的节点temp(因为是双向链表,因此可以实现自我删除某个节点)。
(2)使得temp.prev.next=temp.next;
(3)使得temp.next.prev=temp.prev;
2.双向循环链表
2.1双向循环链表的定义
双向循环链表的头部节点headEntry的前驱节点指向尾部节点tailEntry。尾部节点tailEntry的后继节点指向头部节点headEntry。形成环状。其他节点与双向链表相同。
2.2双向循环链表的示意图
2.3双向循环链表代码实现
public class DCircleLink<E extends Comparable<E>> implements Link<E>{
static class Entry<T>{
private T value;
private Entry<T> next;
private Entry<T> prev;
public Entry(T value){
this.value=value;
this.next=next;
this.prev=prev;
}
}
private Entry<E> prev;
private Entry<E> next;
}