#include <stdio.h>
#include <stdlib.h>
typedef struct DuLNode{
int data;
struct DuLNode * prior, * next;
}DuLNode, * DuLinkList;
void initDuLinkList(DuLinkList * L){
DuLNode * p;
p = (DuLNode *)malloc(sizeof(DuLNode));
p -> prior = NULL;
p -> next = NULL;
* L = p;
}
int ListInsert_DuL(DuLinkList * L, int j, int e){
DuLNode * p = * L, * q, * r;
for (int i = 0; i < j - 1; i++)
if(p != NULL)
p = p -> next;
if(p == NULL || j < 1)
return 1;
q = p -> next;
r = (DuLNode *)malloc(sizeof(DuLNode));
if(q != NULL){
r -> data = e;
r -> next = q;
q -> prior = r;
r -> prior = p;
p -> next = r;
}
else{
r -> data = e;
p -> next = r;
r -> prior = p;
r -> next = NULL;
}
return 0;
}
int ListDelete_DuL(DuLinkList * L, int j, int * e){
DuLNode * p = * L, * q;
for (int i = 0; i < j - 1; i++)
if(p != NULL)
p = p -> next;
if(p == NULL || p -> next == NULL || j < 1)
return 1;
q = p -> next;
if(q -> next != NULL){
p -> next = q -> next;
q -> next -> prior = p;
free(q);
}
else{
p -> next = NULL;
free(q);
}
return 0;
}
int main(){
DuLinkList L;
initDuLinkList(&L);
ListInsert_DuL(&L, 1, 1);
ListInsert_DuL(&L, 2, 2);
ListInsert_DuL(&L, 3, 3);
ListInsert_DuL(&L, 4, 4);
ListInsert_DuL(&L, 5, 5);
DuLNode * p = L;
p = p -> next;
while(p != NULL){
printf("%d ", p -> data);
p = p -> next;
}
printf("\n");
int e;
ListDelete_DuL(&L, 1, &e);
ListDelete_DuL(&L, 3, &e);
p = L;
p = p -> next;
while(p != NULL){
printf("%d ", p -> data);
p = p -> next;
}
return 0;
}