//链表实现插入函数
#define FALSE 0
#define TRUE 1
//单链表插入思想:始终保存一个指向链表当前节点之前的那个节点的指针。`
typedef struct NODE {
struct NODE *link;
int value;
}Node;
//插入到一个有序的单链表。函数的参数是一个只向链表第一个节点的指针和需要插入的值。
int sll_insert(Node **rootp ,int new_value){
Node *current=NULL;
Node *previous=NULL;
Node *new1;
current= *rootp;
//寻找正确的插入位置,方法是按顺序访问链表,直到到达其值大于或等于新插入值的节点
while(current!=NULL&¤t->value<new_value){
previous=current;
current=current->link;
}
new1=(Node *)malloc(sizeof(Node));
if(new1==NULL )
return FALSE;
new1->value=new_value;
//把新结点插入到链表中;
new1->link=current;
if(previous==NULL)*rootp=new1;
else
previous->link=new1;
return TRUE;
}
优化插入函数:
//链表实现
#define FALSE 0
#define TRUE 1
//单链表插入思想:始终保存一个指向链表当前节点之前的那个节点的指针。`
typedef struct NODE {
struct NODE *link;
int value;
}Node;
//插入到一个有序的单链表。函数的参数是一个指向链表第一个节点的指针和需要插入的值。
int sll_insert(register Node **linkp,int new_value){
register Node *current=NULL;
register Node *new1=NULL;
//寻找正确的插入位置,方法是按顺序访问链表,直到到达一个其值大于或等于新值的节点
while((current=*linkp)!=NULL&&
current->value<new_value)linkp=¤t->link;
//为新节点分配内存,并把新值存储到新节点中,如果内存分配失败,函数返回false;
new1=(Node *)malloc(sizeof(Node));
if(new1==NULL)return FALSE;
new1->value=new_value;
//链表中插入新节点
new1->link=current;
*linkp=new1;
return TRUE;
}