给学生出的一道题,后来发现出得难了,干脆自己做了一下,当是练练手吧。 #include <stdio.h> #include <stdlib.h> typedef struct _chain { int n; struct _chain *next; }chain; void print_list(const chain * head) { chain * p; p=head->next; while(p){ printf("%d->", p->n); p=p->next; } printf("END/n"); printf("共%d个。/n", head->n); } void free_list(const chain * head) { chain * p, *temp; p=head->next; while(p){ temp=p->next; free(p); p=temp; } } void create_list_from_array(chain * head, int n[], int len) { int i; chain * p=head; for (i=0;i<len;i++){ p->next = (chain*)malloc(sizeof(chain)); p=p->next; /*!*/ p->n = n[i]; ++head->n; } p->next=0; } chain* reverse_list(chain * to_be_next, chain ** tail) { chain * r; if(to_be_next->next == 0){ *tail = to_be_next; } else{ r = reverse_list(to_be_next->next, tail); r->next = to_be_next; } return to_be_next; } void do_reverse_list(chain *head) { chain *tail=0; chain *tmp; tmp = reverse_list(head->next, &tail); tmp->next=0; head->next = tail; } void main() { chain head; chain *p; int len; int s[]={2,3,1,6,8,9,5,4,8,10}; len=sizeof(s)/sizeof(s[0]); head.n=0; p=&head; create_list_from_array(&head, s, len); print_list(&head); do_reverse_list(&head); print_list(&head); //! free_list(&head); system("pause"); }