#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
int data;
struct list*next;
}List;
List*insert_list_2nd(List*head,int data);
List*insert_list_last(List*head,int data);
List*insert_list_order(List*head,int data);
void print_list(List*head);
List*delete_list(List*head,int value);
int main()
{
List*head=NULL;
int i;
// for(i=0;i<10;i++)
// head=insert_list_2nd(head,i);
// head=insert_list_last(head,i);
for(i=9;i>=0;i--)
head=insert_list_order(head,i);
print_list(head);
for(i=0;i<9;i++)
head=delete_list(head,i);
print_list(head);
}
List*insert_list_2nd(List*head,int data)
{
List*newnode=(List*)malloc(sizeof(List));
newnode->data=data;
/* if(head==NULL)
{
head=newnode;
newnode->next=NULL;
}
else
{
newnode->next=head;
head=newnode;
}*/
newnode->next=head;
head=newnode;
return head;
}
List*insert_list_last(List*head,int data)
{ List*newnode=(List*)malloc(sizeof(List));
List*temp=head;
newnode->data=data;
newnode->next=NULL;
if(head==NULL) return newnode;
while(temp->next)
{
temp=temp->next;
}
temp->next=newnode;
return head;
}
List*insert_list_order(List*head,int data)
{
List*temp=head;
List*newnode=(List*)malloc(sizeof(List));
newnode->data=data;
newnode->next=NULL;
if(head==NULL) //链表为空为空
{
return newnode;
}
if(head->data>data)//链表第一个节点就是要插入的位置
{
newnode->next=head;
return newnode;
}
while(temp->next && temp->next->data<data)
{
temp=temp->next;
}
/* if(temp->next==NULL)
{
temp->next=newnode;
}
else
{
newnode->next=temp->next;
temp->next=newnode;
}*/
newnode->next=temp->next;
temp->next=newnode;
return head;
}
void print_list(List*head)
{
while(head)
{
printf("%d\n",head->data);
head=head->next;
}
}
List*delete_list(List*head,int value)
{ List*temp;
List*p;
if(head==NULL) return NULL;
if(head->data==value)
{
temp=head->next;
free(head);
return temp;
}
temp=head;
while(temp->next && temp->next->data!=value)
{
temp=temp->next;
}
//p=temp->next;
if(temp->next==NULL)
{
printf("no have %d\n",value);
return head;
}
else
{
p=temp->next;
temp->next=temp->next->next;
free(p);
return head;
}
}