#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct __double_list
{
char data[10] ;
struct __double_list *prev ;
struct __double_list *next ;
}DL ;
DL *create_dl_node(char *data)
{
DL *p = malloc(sizeof(DL));
if(NULL == p)
{
printf("create dl node fair!\n");
return NULL ;
}
memcpy(p->data, data, 10);
p->next = NULL ;
p->prev = NULL ;
return p;
}
void double_list_tail_insert(DL *header , DL *new)
{
DL *p = header ;
while(NULL != p->next)
{
p = p->next ;
}
p->next = new ;
new->prev = p;
}
void double_list_top_insert(DL *header , DL *new)
{
new->next = header->next ;
if(NULL != header->next)
header->next->prev = new ;
header->next = new ;
new->prev = header ;
}
void double_list_for_each(DL *header)
{
DL *p = header ;
while(NULL != p->next)
{
p = p->next ;
printf("%s\r\n",p->data);
}
}
void double_list_for_each_nx(DL *header)
{
DL *p = header ;
while(NULL != p->next)
{
p = p->next ;
}
while(NULL != p->prev)
{
printf("%s\r\n",p->data);
p = p->prev ;
}
}
int double_list_delete_node(DL *header , char *data)
{
DL *p = header;
while(NULL != p->next)
{
p = p->next ;
if(strcmp(p->data, data)==0)
{
if(p->next != NULL)
{
p->next->prev = p->prev ;
p->prev->next = p->next ;
free(p);
}
else
{
p->prev->next = NULL ;
free(p);
}
return 0 ;
}
}
printf("\n没有找到对应要删除的节点,或者节点已经被删除!\n");
return -1 ;
}
int List_Delete_FirstNode(DL *header)
{
DL *p = header;
p = p->next;
p->next->prev = p->prev;
p->prev->next = p->next;
free(p);
}
int main(void)
{
int i ;
char zzz[10] = {0};
char str[10][10];
strcpy(str[0], "123");
strcpy(str[1], "234");
strcpy(str[2], "345");
strcpy(str[3], "456");
strcpy(str[4], "567");
strcpy(str[5], "678");
strcpy(str[6], "789");
strcpy(str[7], "890");
strcpy(str[8], "901");
strcpy(str[9], "012");
DL *header = create_dl_node(zzz);
for(i = 0 ; i < 10 ; i++)
{
double_list_tail_insert(header,create_dl_node(str[i]));
}
double_list_for_each(header);
double_list_delete_node(header, str[7]);
printf("\r\n");
double_list_for_each(header);
return 0 ;
}