首页 > 代码库 > 反转链表(递归与非递归)

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

 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 =http://www.mamicode.com/ n;53     pre = head;54     while(n--)55     {56         temp = new LNode;57         temp->data =http://www.mamicode.com/ 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 }

 

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