有序双链表
typedef struct NODE {
struct NODE* fwd;
struct NODE* bwd;
int value;
}Node;
fwd指向下一个节点,bwd指向前一个节点。
可能的情况:
1)新值插入到链表中间位置;
2)新值插入到链表的起始位置;
3)新值插入到链表的结束位置;
4)新值插入到链表的起始位置,又插入到链表的结束位置(原链表为空)。
/*
**把一个值插入到一个双链表,rootp是一个指向根节点的指针,
**value是要插入的新值
**返回值:如果要插入的值已经存在,返回0
**如果内存不足导致无法插入,返回-1,如果插入成功,返回1。
*/
#include <stdlib.h>
#include <stdio.h>
#include "doubly_linked_list_node.h"
int
dll_insert(Node *rootp, int value)
{
Node *this;
Node *next;
Node *newnode;
/*
**查看value是否已经存在于链表中,如果是就返回
**否则,创建一个新节点(让newnode指向它)
**“this”将指向应该在新节点之前的那个节点
**“next”蒋指向应该在新节点之后的那个节点
*/
for(this = rootp; (next = this->fwd) != NULL; this = next){
if(next->value == value)
return 0;
if(next->value > value)
break;
}
newnode = (Node*)malloc(sizeof(Node