美文网首页
[C语言]利用二级指针进行链表的添加和删除处理

[C语言]利用二级指针进行链表的添加和删除处理

作者: NinthDay | 来源:发表于2015-12-25 22:36 被阅读304次

天道酬勤,每日记点笔记也是蛮有意思的。

今天温习了下 POINTERS ON C 书中的链表一章,记录下使用二级指针对链表进行添加和删除处理。

插入函数:


#define TRUE 1
#define FALSE 0
/*
  * brief: Single Linked List
  * para:   head       -> the head of list
  *           newValue -> item which to be inserted
*/
int sll_insert(node **head,int newValue)
{
  node * curr;
  node *new;

  // find the position
  while((curr = *head)  != NULL && curry->value <newValue)
           head = &curr->next;
 
  // new
  new = (node *)malloc(sizeof(node));
  if(new == NULL)return FALSE;
 
  //insert
  new->value = newValue;
  new->next = curr;

  *head = new;
  return TRUE;
}

删除函数:



typedefbool(* remove_fn)(node const* v);   


// 写法一:
void remove_if(node ** head, remove_fn rm)
{
  node *curr;
  
   while( (curr = *head) != NULL)
  {
      // notice entry and curr point both point to the same one
      node *entry = curr;//delete it !!
      if(rm(entry)){
         *head = curr->next;   
         free(entry);
      }else{
        head = &curr->next;
      }
  }
}

不过注意到 写法一 中重复比较多,例如curr 其实都没必要存在!所以我更推荐写法二。

// 写法二:
void remove_if(node ** head, remove_fn rm)
{
    for(node** curr = head; *curr; )
    {
        node * entry = *curr;
        if(rm(entry))
        {
            *curr = entry->next;
            free(entry);
        }
        else
            curr = &entry->next;
    }
}

相关文章

  • [C语言]利用二级指针进行链表的添加和删除处理

    天道酬勤,每日记点笔记也是蛮有意思的。 今天温习了下 POINTERS ON C 书中的链表一章,记录下使用二级指...

  • 2017年10月16日学习总结

    今天上午进行了c语言强化训练,结构体指针和单链表的处理,对于结构体指针理解的还可以,单链表理解起来特别绕,挺困难的...

  • 2018-09-13

    用c语言创建单链表,参数采用二级指针。 源码如下: //单链表头插法创建 #include #include #d...

  • JAVA从零开始实现数据结构五:双向链表

    相较于单链表与循环链表,双向链表增加了prior指针在进行增加、插入、删除时需要处理两个指针完整的MyDouble...

  • C语言结构体实现线性链表

    利用C语言的结构体和指针链表的相关知识,自己动手敲了下实现类似链表的功能。 创建方法 实现功能是接受用户输入链表长...

  • [c/c++] _ 指针及指针的基本使用

    指针是c语言的一个重要的数据类型,在C语言程序设计中,利用指针可以直接对内存中的各种不同的数据进行快速处理,同时也...

  • C语言指针部分说明

    二级指针 函数指针 数组和链表 访问数组 访问链表 Makefile

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • 数据结构之静态链表

    前人没有C语言,或者说他们使用的语言没有类似C语言的指针功能.那他们是如何实现和描述链表的呢? 通过数组代替指针来...

  • 链表删除--二级指针

    教科书上的链表删除节点 也可以这样(leveldb中LRUCache链表使用的该方法删除节点)

网友评论

      本文标题:[C语言]利用二级指针进行链表的添加和删除处理

      本文链接:https://www.haomeiwen.com/subject/hvfbhttx.html