单链表的反转(递归与非递归方式)
2016-09-19 11:26
302 查看
定义链表结构
非递归反转单链表
递归反转单链表
测试
struct ListNode { int val; ListNode *next; ListNode(int v) : val(v), next(NULL) {} };
非递归反转单链表
ListNode* reverse(ListNode *root) { if (root == NULL || root->next == NULL) return root; ListNode *cur = root->next; root->next = NULL; while (cur != NULL) { ListNode *tmp = cur->next; cur->next = root; root = cur; cur = tmp; } return root; }
递归反转单链表
void reverseRec(ListNode *root, ListNode *&head) { if (root == NULL) return; if (root->next == NULL) { head = root; return; } reverseRec(root->next, head); root->next->next = root; root->next = NULL; }
测试
#include <iostream>
using namespace std;
struct ListNode { int val; ListNode *next; ListNode(int v) : val(v), next(NULL) {} };
ListNode* createList(ListNode *root)
{
if (root == NULL)
{
ListNode *root = new ListNode(0);
ListNode *p1 = new ListNode(1);
ListNode *p2 = new ListNode(2);
root->next = p1;
p1->next = p2;
return root;
}
}
void tranverse(ListNode *root)
{
while (root != NULL)
{
cout << root->val << " ";
root = root->next;
}
cout << endl;
}
void deleteList(ListNode *root)
{
while (root != NULL)
{
delete root;
root = NULL;
}
}
ListNode* reverse(ListNode *root) { if (root == NULL || root->next == NULL) return root; ListNode *cur = root->next; root->next = NULL; while (cur != NULL) { ListNode *tmp = cur->next; cur->next = root; root = cur; cur = tmp; } return root; }
void reverseRec(ListNode *root, ListNode *&head) { if (root == NULL) return; if (root->next == NULL) { head = root; return; } reverseRec(root->next, head); root->next->next = root; root->next = NULL; }
int main()
{
ListNode *root = createList(root);
//ListNode *root = NULL;
tranverse(root);
root = reverse(root);
tranverse(root);
ListNode *head = NULL;
reverseRec(root, head);
tranverse(head);
deleteList(head);
}
相关文章推荐
- 全面分析再动手的习惯:链表的反转问题(递归和非递归方式)
- 实现链表的反转(递归方法与非递归方法)
- 递归的方式反转链表
- 链表反转的递归和非递归实现方式
- 两有序链表合并为一个--递归与非递归两种方式
- 如何使用递归和非递归方式反转单向链表
- 【剑指offer】递归循环两种方式反转链表
- 使用递归和非递归方式反转单向链表
- 使用单链表反转的递归和非递归实现方式
- 使用递归和非递归方式反转单向链表
- 【剑指offer】递归循环两种方式反转链表
- 链表反转的递归和非递归实现方式
- java实现单链表反转(递归方式)
- 链表反转(递归与非递归实现)
- 链表反转:有两种方式 - 普通、递归
- 使用递归和非递归方式反转单向链表
- 两有序链表合并为一个--递归与非递归两种方式
- 链表反转(使用递归和非递归两种方式)
- 剑指Offer系列---(18)反转链表(递归与非递归实现)
- [LeetCode] Reverse Linked List(递归与非递归反转链表)