假期day4,链表增加与删除(2024/2/5)
单链表头插增加
Linklist insert_head(datatype element,Linklist head)
{
//创建新节点
Linklist s=create_node();
if(NULL==s)
return head;
s->data=element;
//1,判断链表为空
if(NULL==head)
{
head=s;
}
else //链表不为空
{
s->next=head;
head=s;
}
return head;
}
单链表头删除
Linklist delete_head(Linklist head)
{
//1,判断链表为空
if(NULL==head)
{
return head;
}
else //链表存在1个或多个节点
{
Linklist del=head;
head=head->next;
free(del);
del=NULL;
}
return head;
}
单链表删除指定位置
Linklist delete_pos(int pos,Linklist head)
{
//1,判断位置是否合法
//2,判断链表为空
if(NULL==head || pos<1 || pos>Length(head))
{
return head;
}
//3,判断是否只有一个节点,删除第一个位置
if(head->next==NULL ||pos==1)
{
head=delete_head(head);
}
else //存在多个节点 >=2
{
//找到pos-1位置的节点
Linklist p=head;
for(int i=1;i<pos-1;i++)
{
p=p->next;
}
//删除p->next
Linklist q=p->next;
p->next=q->next;
free(q);q=NULL;
}
return head;
}
双链表头插
Doublelink double_insert_head(datatype element,Doublelink head)
{
//创建新节点s
Doublelink s=create_node();
if(s==NULL)
return head;
strcpy(s->data,element);
//1.判断链表为空
if(NULL ==head)
head=s;
//2.存在多个节点>=1
else
{
s->next=head;
head->priv=s;
head=s;
}
return head;
}
双链表头删除
Doublelink delete_rear(Doublelink head)
{
//1,判断链表为空
if(NULL ==head)
return head;
//2,只有一个节点
if(head->next==NULL)
{
free(head);head=NULL;
}
else //>=2
{
//找到最后一个节点
Doublelink p=head;
while(p->next!=NULL)
{
p=p->next;
}
p->priv->next=NULL;
free(p);
p=NULL;
}
return head;
}