一、双链表结点类
public class DoubleNode<T>
{
public T data;
public DoubleNode<T> prev, next; //前驱,后继
public DoubleNode(T data, DoubleNode<T> prev,DoubleNode<T> next) //构造方法重载
public DoubleNode(T data)
public DoubleNode()
public String toString()
}
二、双链表的特征和操作
-
- 空双链表,只有头结点。
head.next==null且head.prev==null
-
- 非空双链表,设p指向双链表中非两端的某个结点,有:
p = p.next.prev = p.prev.next
- 双链表的插入操作
q=new DoubleNode<T>(x);
q.prev = p;
q.next = p.next;
if (p.next!=NULL)//中间插入
p.next.prev = q;
p.next=p;
- 双链表的删除操作
p.prev.next = p.next; //有p.prev!=null
if (p.next!=null) //中间删除
p.next.prev = p.prev;
三、循环双链表
空循环双链表有
head.next==head且
head.prev==head
- 循环双链表类CirDoublyList
public class CirDoublyList<T> //循环双链表类
{
DoubleNode<T> head; //头指针
CirDoublyList() //构造空表
boolean isEmpty() //判空
DoubleNode<T> insert(int i, T x) //插入x为第i个元素
DoubleNode<T> insert(T x) //尾插入x
//实现以下方法
String toPreviousString() //反序输出
T removeLast() //删除最后一个元素
}
-
-
- 插入x为第i个元素
-
public DoubleNode<T> insert(int i, T x)
-
-
- 尾插入x元素,O(1)
-
public DoubleNode<T> insert(T x)
-
-
- 删除元素
-
T remove(int i) //删除第i个元素
T removeLast() //删除最后一个元素