反转链表(递归与非递归)
2014-09-09 16:41
405 查看
#include<iostream> using namespace std; typedef struct LNode{ int data; LNode* next; }LNode; //非递归方法, LNode* reverse(LNode* head) { if(!head||!head->next) return head; LNode *pre,*cur,*next; pre = head; cur = head->next; next = cur->next; pre->next = NULL; while(next!=NULL) { next = cur->next; cur->next = pre; pre = cur; cur = next; } head = pre; return head; } //递归反转链表 LNode* reverseRecursion(LNode* currnode) { if(!currnode->next||!currnode) { return currnode; } else{ LNode* temp = reverseRecursion(currnode->next); LNode* nextnode = currnode->next; nextnode->next = currnode; currnode->next = NULL; return temp;//返回当前节点 } } //创建链表 LNode* createList(int n) { LNode* head, *temp,*pre; head = NULL; head = new LNode; head->data = n; pre = head; while(n--) { temp = new LNode; temp->data = n; pre->next = temp; pre = temp; } pre->next = NULL; return head; } int main(){ int n =6; LNode * list1,*list2,*temp1,*temp2; list1 = createList(n);//初始链表 temp1 = list1; while(n--) { cout<<"init node data:"<<temp1->data<<endl; temp1 = temp1->next; } cout<<"head node data:"<<list1->data<<endl; //list2 = reverse(list1); list2 = reverseRecursion(list1); n = 6; temp2 = list2; while(n--) { cout<<"reverse node data:"<<temp2->data<<endl; temp2 = temp2->next; } return 0; }
相关文章推荐
- 链表反转(使用递归和非递归两种方式)
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 边看边写(链表反转(递归和非递归))
- 链表的反转(递归实现和非递归实现)
- 单链表递归反转和非递归翻转
- 数据结构学习笔记1-链表反转(递归与非递归)
- 链表的建立与反转(递归反转和非递归反转)
- 反转单链表 递归与非递归
- 单链表反转(递归和非递归) (Java)
- 单链表反转(递归和非递归)
- 链表反转--递归与非递归
- 链表反转的递归和非递归
- 单链表反转(递归和非递归)
- 【面试题】单链表反转-递归和非递归
- 单链表反转(非递归)
- 【剑指offer】递归循环两种方式反转链表
- 反转链表递归和非递归实现(面试题 16)
- 使用递归和非递归方式反转单向链表
- 单链表的反转(用循环和递归实现单链表反转)
- 链表的逆置(用到递归和非递归)