复习单向,双向链表,并且实现两种链表的增加和删除功能。

单链表头插

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 insert_rear(datatype element,Linklist head)
{
//创建新节点s
    Linklist s=create_node();
    if(NULL==s)
        return head;
       s->data=element;

//1,判断链表为空
    if(NULL ==head)
    {
        head=s;
    }
    else //链表不为空
    {
        //1,循环到最后一个节点
        Linklist p=head;
        while(p->next!=NULL)
        {
            p=p->next;
        }
        //2,在p后面插入s
        p->next=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_rear(Linklist head)
{
    //1,判断链表为空
    if(NULL ==head)
        return head;
    //2,判断链表只有一个节点
    if(NULL ==head->next)
    {
        free(head);head=NULL;
    }
    else //存在多个节点>=2
    {
        //3.找到倒数第2个节点
        Linklist del=head;
        while(del->next->next!=NULL)
        {
            del=del->next;
        }
        //4.删除del->next
        free(del->next);
        del->next=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 doublelink_insert_rear(datatype element,Doublelink head)
{
    //创建新节点s
    Doublelink s=create_node();
    if(s==NULL)
        return head;
    strcpy(s->data,element);

    //1,没有节点
    if(NULL ==head)
        head=s;
    else
    {
        //找到最后一个节点
        Doublelink p=head;
        while(p->next!=NULL)
        {
            p=p->next;
        }
        //插入s
        p->next=s;
        s->priv=p;

    }
    return head;

}

双向链表节点头删

Doublelink delete_head(Doublelink head)
{
    //1,判断链表为空
    if(NULL==head)
        return head;
    //2,存在多个节点
    Doublelink q=head;
    head=head->next;
    if(head!=NULL)
        head->priv=NULL;
    free(q);
    q=NULL;
    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;
}

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