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 }