双链表基础算法(C语言)
#include<stdio.h>
#include<stdlib.h>
typedef struct DNode{
int data;
struct DNode *prior,*next;
}DLinkList;
DLinkList *creat(int n){
DLinkList *head,*node,*end;
head=(DLinkList*)malloc(sizeof(DLinkList));
end=head;
int i=0;
for(i=0;i<n;i++){
node=(DLinkList*)malloc(sizeof(DLinkList));
scanf("%d",&node->data);
end->next=node;
node->prior=end;
end=node;
}
end->next=NULL;
return head;
}
void add(DLinkList *L,int n){
int i=0;
DLinkList *s;
while(i<n-1&&L->next!=NULL){
L=L->next;
i++;
}
if(L!=NULL){
s=(DLinkList*)malloc(sizeof(DLinkList));
puts("请输入你要插入的值:");
scanf("%d",&s->data);
s->next=L->next;
L->next->prior=s;
s->prior=L;
L->next=s;
}
else
{
puts("节点不存在");
}
}
void delet(DLinkList *L,int n){
int i=0;
while(i<n-1&&L->next!=NULL){
L=L->next;
i++;
}
if(L!=NULL){
L->next->next->prior=L;
L->next=L->next->next;
}
}
void Print(DLinkList *L){
while(L->next!=NULL)
{
L=L->next;
printf("%d ",L->data);
}
}
int main()
{
int n,m;
DLinkList *L;
L = (DLinkList*)malloc(sizeof(DLinkList));
L->next = NULL;
scanf("%d %d",&n,&m);
L=creat(n);
Print(L);
printf("\n");
add(L,m);
Print(L);
printf("\n");
delet(L,m);
Print(L);
return 0;
}