链表的插入:
一、头插
1、判断空链 :
a:新节点指向NULL
b: 头指向新节点
2、非空链
a: 新节点指向头(第一个节点)
b: 头指向new
综上: 不需判断直接在头操作
代码:
void insert_head(Node ** head , Node * new)
{
new = * head;
* head = new;
}
二、中间插
1、判断空链表
2、非空
遍历找位置
找到 未找到
是头 不是头
是头:
new -> next = * head;
* head = new;
不是头:
new -> next = pre -> next;
pre -> next = new;
未找到:(补在链尾,此时cur为链尾指向的NULL)
pre -> next = new
new -> next = NULL
代码:
void insert_mid(Node ** head , Node * new)
{
Node * cur = NULL;
Node * pre = NULL;
if(* head == NULL){
printf(“it is empty\n”);
return;
}
else{
cur = * head;
放前面
while(cur != NULL && cur -> data != new -> data){
pre = cur;
cur = cur -> next;
}
if(cur == NULL){
pre -> next = new;
new -> next = NULL;
}
else{
if(* head == cur)
{
new -> next = * head;
* head = new;
}
else
{
new -> next = pre -> next;
pre -> next = new;
}
}
}
}
三、尾插
1、判断空链
a、插入第一个节点
2、非空链
a、找到链尾
b、将新节点插入链尾
代码:
void insert_tail(Node ** head , Node * new)
{
Node * cur = NULL;
if(* head == NULL)
{
printf(“it is empty\n”);
return;
}
else
{
cur = * head;
while(cur != NULL )
{
cur = cur -> next;
}
cur -> next = new;
new -> next = NULL;
}
}