/*
** 把一个新值插入到双向链表中,rootp是一个指向根节点的指针
** value是需要插入的新值
** 返回值:如果链表原先已经存在这个值,返回0
** 如果为新值分配内存失败,返回-1
** 如果新值插入成功,返回1
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE {
struct NODE* fwd;
struct NODE* bwd;
int value;
} Node;
int
dll_insert(register Node* rootp, int value)
{
register Node* this;
register Node* next;
register Node* newnode;
/*
** 查看value是否已经存在于链表中,如果是就返回
** 否则,为新值创建一个新节点
** 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));
if (newnode == NULL)
return -1;
newnode->value = value;
/*
**把新节点添加到链表中
*/
newnode->fwd = next;
this->fwd = newnode;
if (this != rootp)
newnode->bwd = this;
else
newnode->bwd = NULL;
if (next != NULL)
next->bwd = newnode;
else
rootp->bwd = newnode;
return 1;
}
c语言实现双向链表的插入
最新推荐文章于 2024-07-04 11:06:26 发布