数据结构-链表反置

 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 }

 

posted on 2015-12-30 20:59  koikoi  阅读(227)  评论(0)    收藏  举报

导航