反转链表(递归与非递归)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 typedef struct LNode{
 5     int data;
 6     LNode* next;
 7 }LNode;
 8 //非递归方法,
 9 LNode* reverse(LNode* head)
10 {
11     if(!head||!head->next)
12         return head;
13     LNode *pre,*cur,*next;
14     pre = head;
15     cur = head->next;
16     next = cur->next;
17     pre->next = NULL;
18     while(next!=NULL)
19     {
20         next = cur->next;
21         cur->next = pre;
22         pre = cur;
23         cur = next; 
24     }
25     head = pre;
26     return head;
27 }
28 //递归反转链表
29 LNode* reverseRecursion(LNode* currnode)
30 {
31     if(!currnode->next||!currnode)
32     {
33         return currnode;
34         
35     }
36     else{
37 
38         LNode* temp = reverseRecursion(currnode->next);
39         LNode* nextnode = currnode->next;
40         nextnode->next = currnode;
41         currnode->next = NULL;
42         return temp;//返回当前节点
43     }
44     
45 }
46 //创建链表
47 LNode* createList(int n)
48 {
49     LNode* head, *temp,*pre;
50     head = NULL;
51     head = new LNode;
52     head->data = n;
53     pre = head;
54     while(n--)
55     {
56         temp = new LNode;
57         temp->data = n;
58         pre->next = temp;
59         pre = temp;
60     }
61     pre->next = NULL;
62     return head;
63     
64 }
65 
66 int main(){
67     int n =6;
68     LNode * list1,*list2,*temp1,*temp2;
69     list1 = createList(n);//初始链表
70     temp1 = list1;
71     while(n--)
72     {
73         cout<<"init node data:"<<temp1->data<<endl;
74         temp1 = temp1->next;
75     }
76     cout<<"head node data:"<<list1->data<<endl;
77     //list2 = reverse(list1);
78     list2 = reverseRecursion(list1);
79     n = 6;
80     temp2 = list2;
81     while(n--)
82     {
83         cout<<"reverse node data:"<<temp2->data<<endl;
84         temp2 = temp2->next;
85     }
86     return 0;
87 }
原文地址:https://www.cnblogs.com/tracylining/p/3962943.html