《c和指针》(五)

一、向一个有序单链表中插入数据
参数说明:proot :单链表的根指针,注意仅仅是一个指针,不包含数据,指向单链表的第一个结点(第一个包含数据的结点)
value :待插入的数据
struct node {
struct node *link;
int value;
}
struct node *sll_insert(struct node **proot, int value)
{
register struct node *current = NULL;
register struct node **linkp = proot;
register struct node *new = NULL;

 while (NULL != (current = *linkp)  &&  current->value < value)  {
           linkp = &current->link;
}

if (NULL == (new = (struct  node  *)malloc(sizeof(struct  node)))) {
             return NULL;

}
new->value = value;
new->link = current;
*linkp = new;

 return  *proot;

}
调用: struct node *root = NULL;
sll_insert(&root, value);
二、向双向链表中插入一个数据,要分为四种插入情况
参数: proot: 双链表的根结点,注意根结点不带数据,
value :待插入的数据
struct node {
struct node *before;
struct node *forward;
int value;
};

struct node *dll_insert(register struct node **proot, int value )
{
register struct node *this = *proot;
register struct node *next = NULL;
register struct node *new = NULL;

              while (NULL != (next = this->forward)  &&  next->value   <  value ) {
                                   this  =  next;
              }
              if (NULL ==  (new == (struct  node  *)malloc(sizeof(struct   node)))) {
                             return   NULL;
              }
              new->value  =  value;

              new->forward  =   next;
              this->forward = new;

              if (this   !=  proot) {  // 插入位置不在起始处
                       new->before =  this;
             } else {   // 插入位置在起始处
                       new->before = NULL;
             }

             if (NULL  !=  next) { // 插入位置不在链表末尾
                       next->before  =  new;  
             } else { // 插入位置在链表末尾,
                      proot->before  =  new;
             }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值