《c和指针》笔记--简洁的单项链表插入操作

来源:互联网 发布:ip网络广播系统破解版 编辑:程序博客网 时间:2024/06/05 03:42

单项链表插入操作,我想应该是最基础不过的东西,今天要介绍的是比较简洁的版本。

需求:插入一个node到链表的正确位置,当前链表中节点的value已经按照由小到大进行排列。

传统的插入操作:

int insertNode(Node** rootp,int new_value){Node *current;Node *previous;Node *new;current = *rootp;previous = NULL;while(current != NULL && current->value < new_value){previous = current;current = current->link;}new = (Node*)malloc(sizeof(Node));if(new == NULL)return 0;new->value = new_value;new->link = current;if(previous == NULL){*rootp = new;}else{previous->link = new;}return 1;}

上面的算法虽然没有什么问题,但是需要定义current和previous2个变量,

而且需要对插入到第一个node的情况作特殊处理。


下面请看改进版本,只要定义一个current变量,而且不需要插入到第一个node的情况作特殊处理。

int insertNode(Node** linkp,int new_value){Node *current;Node *new;while(current = *linkp)!= NULL && current->value < new_value){linkp = &t->link;}new = (Node*)malloc(sizeof(Node));if(new == NULL)return 0;new->value = new_value;new->link = current;*linkp = new;return 1;}

如果链表开始的状态如下:


可见,new node需要插入到一个表头。

插入前的各指针的状态如下:


插入new node



原创粉丝点击