我是靠谱客的博主 无情夏天,最近开发中收集的这篇文章主要介绍链表的不同的插入操作的思考,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、此函数中的head被定义为static,所以不需要用return来返回

来自http://learn.akae.cn/media/ch26s01.html

insert函数虽然简单,其中也隐含了一种特殊情况(Special Case)的处理,当head为NULL时,执行insert操作插入第一个节点之后,head指向第一个节点,而第一个节点的next指针域成为NULL,这很合理,因为它也是最后一个节点。所以空链表虽然是一种特殊情况,却不需要特殊的代码来处理,和一般情况用同样的代码处理即可,这样写出来的代码更简洁

,但是在读代码时要想到可能存在的特殊情况。 

当然,insert函数传进来的参数p也可能有特殊情况,传进来的p可能是NULL,甚至是野指针,本章的函数代码都假定调用者的传进来的参数是合法的,不对参数做特别检查。事实上,对指针参数做检查是不现实的,如果传进来的是NULL还可以检查一下,如果传进来的是野指针,根本无法检查它指向的内存单元是不是合法的,C标准库的函数通常也不做这种检>查,例如strcpy(p, NULL)就会引起段错误。 

void insert(link p)

{

        p->next = head;

        head = p;

}

2、远离C语言好久了所以打算不用static实现这个单链表

 

链表的插入操作,每个插入的新元素都会变成新的表头

受Erlang编程的影响,每个函数都想返回一个值

 

 87 struct node * insert(struct node *list, char ch)                                                          

 88 {

 89     struct node *head = create_node(ch);

 90     head->next = list;  

 91     return head;        

 92 }

 

3、写完2、后感觉怪怪的,觉得在C语言中可以借助指针,没必要直接返回,如下:

 

164 void insert_no_return(struct node *list, char ch)

165 {

167     struct node *node = create_node(ch);

168     node->next = list->next;

169     list->next=node;                                                                                      

170 }

 

如果list传进的是 NULL程序运行,肯定出错。想判断一下,LinuxC编程一站式学习的作者提到,是可以添加判断NULL问题,但如果使用者传一个野指针就无法检查了。 继续思考这问题后面研究

最后

以上就是无情夏天为你收集整理的链表的不同的插入操作的思考的全部内容,希望文章能够帮你解决链表的不同的插入操作的思考所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部