#include <stdio.h> #include <string.h> #include <stdlib.h> #define NR(x) (sizeof(x)/sizeof(x[0])) struct node { int data ; struct node *next ; }; void top_append_list(struct node *head , int value); void print_link(struct node head); void tail_append_list(struct node *head , int value); int delete_link_node(struct node *head , int number); int sort_link_node(struct node *head , int flag ); //flag = 1 s->b 0 b->s void turn_over_node(struct node *head); int main(void) { int array[] = {1,2,5,4,3,8,7,6,9}; struct node head = {.next = NULL} ; struct node *headp ; int i ; for(i = 0 ; i < NR(array) ; i++) { tail_append_list(&head , array[i]); } print_link(head); int num ; sort_link_node(&head , 1); print_link(head); //b -> s sort_link_node(&head , 0); print_link(head); turn_over_node(&head); print_link(head); return 0 ; } void top_append_list(struct node *head , int value) { struct node *New = NULL ; New = malloc(sizeof(struct node)); if(NULL == New){ fprintf(stderr , "分配失败!\n"); return ; } New->data = value ; New->next = head->next ; head->next = New ; } void print_link(struct node head) { struct node *tmp = head.next ; while(tmp) { printf("%d " , tmp->data); tmp = tmp->next ; } putchar('\n'); } void tail_append_list(struct node *head , int value) { struct node *New = NULL ; New = malloc(sizeof(struct node )); if(NULL == New){ fprintf(stderr , "分配失败!\n"); return ; } New->data = value ; struct node *tmp = head ; while(tmp->next && (tmp = tmp->next)) ; New->next = tmp->next ; tmp->next = New ; } int delete_link_node(struct node *head , int number) { struct node *after = head->next , *before = head; int flag = 0 ; while(after) { if(after->data == number) { flag = 1 ; before->next = after->next ; after->next = NULL ; free(after); after = before->next ; continue ; } after = after->next; before = before->next ; } return flag ; } int sort_link_node(struct node *head , int flag ) //flag = 1 s->b 0 b->s { int tmp ; struct node *tmp1 , *tmp2 ; tmp1 = head ; while(tmp1 = tmp1->next) { tmp2 = tmp1->next ; while(tmp2) { if((flag==1)?(tmp1->data > tmp2->data):(tmp1->data < tmp2->data)) { memcpy(&tmp , &tmp1->data , sizeof(int)); memcpy(&tmp1->data , &tmp2->data , sizeof(int)); memcpy(&tmp2->data , &tmp , sizeof(int)); } tmp2 = tmp2->next ; } } } void turn_over_node(struct node *head) { struct node *tmp = head->next ; struct node *cur = NULL; head->next = NULL ; while(cur = tmp) { tmp = tmp->next ; cur->next = head->next ; head->next = cur ; } }