假期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;
}

你可能感兴趣的:(链表,数据结构)