用递归和非递归的方法 逆置单链表
2013-03-19 19:33
183 查看
#include <iostream> using namespace std; struct Node { int data; Node* next; }*head; // 非递归写法 Node* InverseLinkedList(Node* head) { if(head == NULL) return NULL; Node* newHead = NULL; while(head != NULL) { Node* nextNode = head->next; head->next = newHead; newHead = head; head = nextNode; } return newHead; } // 递归写法 Node* InverseLinkedListRecur(Node* head) { if(head == NULL) return NULL; if(head->next == NULL) return head; Node* newHead = InverseLinkedListRecur(head->next); Node *tmp = newHead; while(tmp->next != NULL) { tmp = tmp->next; } tmp->next = head; head->next = NULL; return newHead; } int main() { // 构建链表 9->8->7->6->5->4->3->2->1->0->NULL for(int i = 0; i < 10; i++) { Node* node = new Node(); node->data = i; node->next = head; head = node; } head = InverseLinkedList(head); Node *tmp = head; while(head != NULL) { cout << head->data << " "; head = head->next; } cout << endl; head = InverseLinkedListRecur(tmp); tmp = head; while(head != NULL) { cout << head->data << " "; head = head->next; } cout << endl; while(tmp != NULL) { Node* next = tmp->next; delete tmp; tmp = next; } }
相关文章推荐
- 单链表就地逆置递归与非递归的方法
- 单链表递归和非递归两种翻转方法(手写链表)
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。使用非递归方法以及递归方法。
- 关于链表逆置的递归和迭代方法
- 链表面试题之合并有序的两个线性表-递归和非递归的方法
- 链表的逆置(用到递归和非递归)
- C/C++用递归的方法求链表逆序
- 合并两个有序链表(递归非递归方法)
- 递归和非递归俩种方法实现二叉树的前序、中序、后续遍历
- 【面试题】链表合并-递归和非递归
- 每天学习一算法系列(35)(递归和非递归俩种方法实现二叉树的前序遍历)
- 剑指offer——面试题17:合并两个排序的链表(非递归方法和递归方法)
- 递归和非递归的方法往二叉排序树中插入新的节点
- 第四十三题(递归和非递归俩种方法实现二叉树的前序遍历)
- 请用递归和非递归俩种方法实现二叉树的前序遍历。
- 递归转化为非递归的一般方法
- 链表操作(将两个链表合并成一个链表依然有序,非递归方法和迭代方法)
- 递归转化为非递归的一般方法
- 合并两个已排序的链表(递归方法实现)
- 分别使用递归方法和非递归方法求斐波那契数列,并比较两者的运行速度(测量代码运行时间)