1 #include <stdio.h>
2 #include <assert.h>
3 #include <malloc.h>
4
5 typedef struct NODE
6 {
7 int data;
8
9 struct NODE *next;
10 }Linklist;
11
12 void Reverse(Linklist *head)
13 {
14 assert (NULL != head);
15
16 Linklist *p1 = NULL;
17 Linklist *p2 = NULL;
18
19 if ((NULL == (head->next)) || (NULL == (head->next->next)))
20 {
21 return;
22 }
23
24 p1 = head->next;
25 p2 = p1->next;
26
27 while (NULL != p2)
28 {
29 p1->next = p2->next;
30 p2->next = head->next;
31 head->next = p2;
32 p2 = p1->next;
33 }
34 }
35
36 void initialLinklist(Linklist **head)
37 {
38 assert (head != NULL);
39
40 if (NULL == (*head = (Linklist *)malloc(sizeof(Linklist))))
41 {
42 printf ("Fail to malloc space to *head!\n");
43 return;
44 }
45
46 (*head)->next = NULL;
47 }
48
49 void CreatLinklist(Linklist *head)
50 {
51 assert (head != NULL);
52
53 int data;
54 Linklist *p = head;
55
56 printf ("Please input NODE number, end with -1:\n");
57 scanf ("%d", &data);
58 while (data != -1)
59 {
60 if (NULL == ((p->next) = (Linklist *)malloc(sizeof(Linklist))))
61 {
62 printf ("Fail to malloc space to head->next!\n");
63 return;
64 }
65
66 p = p->next;
67 p->data = data;
68 p->next = NULL;
69
70 scanf ("%d", &data);
71 }
72 }
73
74 void PrintLinklist(Linklist *head)
75 {
76 assert (head != NULL);
77
78 Linklist *p = head->next;
79
80 while (p != NULL)
81 {
82 printf ("%d ", p->data);
83
84 p = p->next;
85 }
86
87 printf ("\n");
88 }
89
90 void FreeLinklist(Linklist *head)
91 {
92 assert (head != NULL);
93
94 Linklist *p = head->next;
95
96 while (p != NULL)
97 {
98 head->next = p->next;
99
100 free (p);
101
102 p = head->next;
103 }
104
105 free (head);
106 head = NULL;
107 }
108
109 int main(void)
110 {
111 Linklist *head = NULL;
112
113 initialLinklist (&head);
114
115 CreatLinklist (head);
116
117 Reverse (head);
118
119 PrintLinklist (head);
120
121 FreeLinklist (head);
122
123 return (0);
124 }
![]()