1 #include<cstdio>
2 #include<cstdlib>
3
4 struct Node{
5 int num;
6 Node *next;
7 };
8
9 void Add(Node **head, int num){
10 Node* node = new Node;
11 node->num = num;
12 node->next = *head;
13 *head = node;
14 }
15
16 void PrintLink(Node *head){
17 Node *temp = head;
18 while(temp!=NULL){
19 printf("%d ", temp->num);
20 temp = temp->next;
21 }
22 printf("\n");
23 }
24
25 void ReverseLink(Node **head){
26 Node* prev = NULL;
27 Node* curr = *head;
28 Node* next;
29 while(curr != NULL){
30 next = curr->next;
31 curr->next = prev;
32 prev = curr;
33 curr = next;
34 }
35 *head = prev;
36 }
37
38 Node* ReverseLink2(Node* head){
39 if(NULL == head || head->next == NULL)
40 return head;
41 Node *temp = ReverseLink2(head->next);
42 head->next->next = head;
43 head->next = NULL;
44 return temp;
45 }
46
47 int main(){
48 Node *head = NULL;
49 Add(&head, 1);
50 Add(&head, 2);
51 Add(&head, 3);
52 Add(&head, 4);
53 Add(&head, 5);
54 PrintLink(head);
55 head = ReverseLink2(head);
56 ReverseLink(&head);
57 PrintLink(head);
58 return 0;
59 }