在一个双向链表中,每个节点都包含两个指针—指向前一个节点的指针和指向后一个节点的指针。如下图所示:
其类型声明为:
typedef struct Node{
struct Node * fwd;
struct Node * bwd;
int value;
}Node;
同单向链表一样,我们同样需要一个root节点来遍历整个链表,其value字段不使用,当然你可以用它来保存其他一些 关于链表的信息。根节点的fwd字段指向链表的第1个节点,根节点的bwd字段指向链表的最后一个节点。如果为空链表,这两个字段都为NULL。链表第1个节点的bwd字段和最后一个节点的fwd字段都为NULL。
介绍完基本结构后,下面说一下有序双向链表的插入过程。
当我们把一个节点插入到一个链表时,可能出现4中情况:
1.新值可能必须插入到链表的中间位置。
2新值可能必须插入到链表的起始位置。
3新值可能必须插入到链表的结束位置。
4链表为空。
在每种情况下,需要修改4个指针。
程序如下所示:
1 int insert(Node *rootp,int value){
2 Node *this;