双向链表创建、插入、删除

本文介绍如何使用C语言创建含有N个节点的双向链表,并实现了在链表中插入及删除节点的功能。文章提供了完整的代码示例,包括创建链表、插入节点、删除节点以及打印链表的方法。

创建含有N各节点的双向链表,实现在链表中插入、删除节点。

#include<stdio.h>
#include<stdlib.h>

typedef struct DulNode{
    int data;
    struct DulNode *prior;
    struct DulNode *next;
}DNode,*DLinkList;

//创建含有n个节点的双链表
DLinkList createDulList(int n)
{
    DLinkList head = (DLinkList)malloc(sizeof(DNode));
    DLinkList p = head;
    head->prior = NULL;
    for(int i=1;i<=n;i++)
    {
        printf("输入第%d个节点",i);
        scanf("%d",&p->data);
        if(i!=n)
        {
            DLinkList q = (DLinkList)malloc(sizeof(DNode));
            p->next = q;
            q->prior = p;
            p = q;
        }

    }
    p->next = NULL;

    return head;
}

//双向链表中插入一个节点
DLinkList insertDulList(DLinkList head,int k,int m)
{
    DLinkList p = head;
    if(head==NULL)
        return head;
    DLinkList q = (DLinkList)malloc(sizeof(DNode));
    if(q==NULL)
        exit(1);
    int i=1;
    while(i++<k && p!=NULL)
    {
        p = p->next;
    }

    q->data = m;
    q->prior = p->prior;
    p->prior->next = q;
    q->next = p;
    p->prior = q;


    return head;


}

//双向链表删除一个节点
DLinkList deleteDulList(DLinkList head,int k)
{
    DLinkList p = head;
    if(head==NULL)
        return NULL;
    int i=1;
    while(i++<k && p!=NULL)
    {
        p = p->next;
    }

    p->prior->next = p->next;
    p->next->prior = p->prior;
    free(p);
    return head;
}
//顺序打印lianbiao链表
void printDList(DLinkList head)
{
    if(head==NULL)
        exit(1);
    while(head!=NULL)
    {
        printf("%d ",head->data);
        head = head->next;
    }
}


void main()
{
    DLinkList head = createDulList(5);
    printDList(head);
    printf("\n");

    DLinkList h = insertDulList(head,3,0);
    printDList(h);
    printf("\n");

    DLinkList dl = deleteDulList(head,3);
    printDList(dl);
    printf("\n");
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值