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

被折叠的 条评论
为什么被折叠?



