双链表的插入学习(C和指针)

在一个双链表中,每个节点都包含两个指针——指向前一个节点的指针和指向后一个节点的指针。
typedef struct NODE {
struct NODE *fwd;
struct NODE *bwd;
int         value;
}Node;




/* 
** 把一个新值插入到一个双链表中。rootp是一个指向根节点的指针,
** value是需要插入的新值。
** 返回值:如果链表原先已经存在这个值,函数返回0.
** 如果为新值分配内存失败,函数返回-1.
** 如果新值成功地插入到链表中,函数返回1.
*/
int dll_insert(register Node *rootp, int value)
{
register Node *this;
register Node *next;
register 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));
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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值