#include <stdio.h>


#include <stdlib.h>


#include <string.h>


typedef int Datatype;


typedef struct node 


{


      Datatype data;


      struct node *next;


}linknode;




linknode*create_empty_linklist()


{


     linknode*head=NULL;


     head = (linknode*)malloc(sizeof(linknode));


     if(NULL==head)


     {


         printf("fail to malloc\n");


         return NULL;


     }


     bzero(head,sizeof(linknode));


     return head;


};



int is_empty_linklist(linknode*head)


{


     return head->next==NULL ?1 :0;


}



void insert_head_linklist(linknode *head,Datatype data)


{


    linknode *temp = NULL;


    temp = (linknode*)malloc(sizeof(linknode));


    if(NULL == temp)


    {


       printf("fail to malloc\n");


       return;


    }


    temp->data=data;


    temp->next=head->next;


    head->next=temp;


    return;


}



void insert_tail_linklist(linknode*head,Datatype data)


{


    linknode*temp=NULL;


    temp=(linknode*)malloc(sizeof(linknode));


    if(NULL==temp)


    {


        printf("fail to malloc\n");


        return ;


    }


    temp->data=data;



    linknode*p=head;


    while(p->next!=NULL)


    {


       p=p->next;


    }



    temp->next=p->next;


    p->next=temp;


    return;


}



void printf_linklist_data(linknode*head)


{


    linknode*p=NULL;


    p=head;


    while(p->next!=NULL)


    {


        printf("%d ",p->next->data);


        p=p->next;


    }


    putchar('\n');


    return;


}



void insert_order_linklist(linknode*head,Datatype data)


{    


    linknode*temp=NULL;


    temp=(linknode*)malloc(sizeof(linknode));


    if(NULL==temp)


    {


        printf("fail to malloc\n");


        return ;


    }


    temp->data=data;



    linknode*p=head;


    while(p->next!=NULL && temp->data > p->next->data)


    {


        p=p->next;


    }


    temp->next=p->next;


    p->next=temp;


    return;


}



void delete_assign_linklist(linknode*head,Datatype data)


{


    linknode *p=head;


    linknode *q=NULL;


    while(p->next!=NULL)


    {


       if(p->next->data==data)


           break;


       p=p->next;


    }


    q=p->next;


    p->next=p->next->next;


    free(q);


    q=NULL;


    return ;


}



void delete_samedata_linklist(linknode*head,Datatype data)


{


       linknode*p=head;


       linknode*q=NULL;


       while(p->next!=NULL)


       {


         if(p->next->data==data)


         {


          q=p->next;


          free(q);


          p->next=p->next->next;


         }else{


          p=p->next;


         }


       }


       return ;


}



void reverse_linklist(linknode*head)


{


    linknode*p=head->next->next;


    head->next->next=NULL;


    while(p!=NULL)


    {


        insert_head_linklist(head,p->data);


        p=p->next;


    }


    return;


}






void clean_all_node_linklist(linknode*head)


{


    linknode*p=head;


    linknode*q=NULL;


    while(p!=NULL)


    {


        printf_linklist_data(p);


        q=p->next;


        free(p);


        p=NULL;


        p=q;


    }


    return;


}



int main(int argc, const char *argv[])


{


    linknode*head=NULL;


    Datatype data;


    int i=0;


    head=create_empty_linklist();



    printf("please input 5 num:");


    for(i=0;i<5;i++)


    {


       scanf("%d",&data);


       insert_head_linklist(head,data);


    }


    while(getchar()!='\n');//清缓存


    printf_linklist_data(head);



/*


    clean_all_node_linklist(head);




    reverse_linklist(head);


    printf_linklist_data(head);



    delete_assign_linklist(head,3);


    printf_linklist_data(head);



    delete_samedata_linklist(head,2);


    printf_linklist_data(head);



    


   


    printf("please input 5 num:");


    for(i=0;i<5;i++)


    {


       scanf("%d",&data);


       insert_tail_linklist(head,data);


    }


    printf_linklist_data(head);


    



    insert_order_linklist(head,3);


    printf_linklist_data(head);


*/


    return 0;


}