双向链表
#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
int data;
struct list*left;
struct list*right;
}List;
void insert_list_2nd(List*head,int data);
void insert_list_last(List*head,int data);
void insert_list_order(List*head,int data);
void print_list(List*head);
void delete_list(List*head,int value);
int main()
{ int i;
List*head=(List*)malloc(sizeof(List));
head->data=-1;
head->left=head->right=NULL;
// for(i=0;i<10;i++)
//insert_list_last(head,i);
// insert_list_2nd(head,i);
for(i=9;i>=0;i--)
insert_list_order(head,i);
print_list(head);
for(i=0;i<10;i++)
delete_list(head,i);
print_list(head);
}
void insert_list_2nd(List*head,int data)
{
List*newnode=(List*)malloc(sizeof(List));
newnode->data=data;
newnode->right=head->right;
head->right=newnode;
newnode->left=head;
if(newnode->right)
{
newnode->right->left=newnode;
}
}
void insert_list_last(List*head,int data)
{ List*newnode=(List*)malloc(sizeof(List));
newnode->data=data;
while(head->right)
{
head=head->right;
}
head->right=newnode;
newnode->left=head;
newnode->right=NULL;
}
void insert_list_order(List*head,int data)
{ List*newnode=(List*)malloc(sizeof(List));
newnode->data=data;
while(head->right && head->right->data<data)
{
head=head->right;
}
if(head->right==NULL)
{
head->right=newnode;
newnode->left=head;
newnode->right=NULL;
}
else
{
newnode->right=head->right;
head->right=newnode;
newnode->left=head;
newnode->right->left=newnode;
}
}
void print_list(List*head)
{
while(head)
{
printf("%d\n",head->data);
head=head->right;
}
}
void delete_list(List*head,int value)
{
List *temp;
while(head->right && head->right->data!=value)
{
head=head->right;
}
if(head->right==NULL)
{
printf("don't have %d\n",value);
return ;
}
else
{
temp=head->right;
head->right=temp->right;
if(temp->right)
{
temp->right->left=head;
}
free(temp);
}
}