跟单链表相比差距很大的在于头插和尾插法
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<windows.h>
typedef struct LNode
{
int data;
struct LNode *next;
struct LNode *prior;
}LNode;
void CreatDoubleLinkList_head(LNode *&L,int a[],int n)
{
LNode *s;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
L->prior=NULL;
for(int i=0;i<n;i++){
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
s->next=L->next;
if(L->next!=NULL){
L->next->prior=s;
}
s->prior=L;
L->next=s;
}
}
void CreatDoubleLinkList_end(LNode *&L,int a[],int n)
{
L=(LNode*)malloc(sizeof(LNode));
LNode *s,*r=L;
L->next=NULL;
L->prior=NULL;
for(int i=0;i<n;i++){
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
r->next=s;
s->prior=r;
r=r->next;
}
r->next=NULL;
}
void PrintDounleLinkList(LNode *L)
{
L=L->next;
while(L!=NULL){
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
void DeleteDoubleLinkList(LNode *L,int n)
{
while (L->data!=n)
{
L=L->next;
}
L=L->prior;
LNode *s=L->next;
L->next=L->next->next;
L->next->prior=L;
free(s);
}
int main(){
LNode *L;
int n,a[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
CreatDoubleLinkList_end(L,a,n);
PrintDounleLinkList(L);
DeleteDoubleLinkList(L,3);
PrintDounleLinkList(L);
system("pause");
return 0;
}```
|