1 #include<stdio.h> 2 #include<stdlib.h> 3 4 typedef struct Node{ 5 int data; 6 struct Node *next; 7 }Link; 8 9 void add(Link * Head); 10 void print(Link * Head); 11 Link* reverse(Link * Head); 12 13 int main() 14 { 15 Link *Head = (Link *)malloc(sizeof(Link)); 16 Head->next = NULL; 17 printf("请输入节点的值,输入-1表示结束\n"); 18 add(Head) ; 19 print(Head); 20 Head=reverse(Head); 21 22 print(Head); 23 24 getchar(); 25 return 0; 26 } 27 void add(Link * Head) 28 { 29 int data; 30 while(~scanf("%d", &data)) 31 { 32 if(data == -1) break; 33 Link *L = (Link *)malloc(sizeof(Link)); 34 L->data = data; 35 if(Head->next == NULL) 36 { 37 L->next = NULL; 38 Head->next = L; 39 } 40 else 41 { 42 L->next = Head->next; 43 Head->next = L; 44 } 45 46 } 47 } 48 49 void print(Link *Head) 50 { 51 Link *p = (Link *)malloc(sizeof(Link)); 52 p = Head; 53 while(p->next != NULL) 54 { 55 56 printf("%d, ", p->next->data); 57 p = p->next; 58 } 59 p = NULL; 60 free(p); 61 printf("\n"); 62 } 63 64 Link* reverse(Link * Head) 65 { 66 Link * NewHead = (Link *)malloc(sizeof(Link)); 67 NewHead->next = NULL; 68 Link *p = (Link *)malloc(sizeof(Link)); 69 p = Head; 70 while(p->next != NULL) 71 { 72 Link *L = (Link *)malloc(sizeof(Link)); 73 L->data = p->next->data; 74 if(NewHead->next == NULL) 75 { 76 L->next = NULL; 77 NewHead->next = L; 78 } 79 else 80 { 81 L->next = NewHead->next; 82 NewHead->next = L; 83 } 84 85 p = p->next; 86 } 87 p = Head->next; 88 Link *p1 = (Link *)malloc(sizeof(Link)); 89 p1 = Head->next; 90 while(p1->next != NULL) 91 { 92 p1 = p1->next; 93 free(p); 94 p = p1 ; 95 } 96 Head = NewHead; 97 NewHead = NULL; 98 free(NewHead); 99 free(p1); 100 p1 = NULL; 101 p = NULL; 102 103 return Head; 104 }