单链表递归反转和非递归翻转
2016-09-21 23:19
225 查看
今晚抽时间复习了链表,整理了递归版本和非递归版本的单链表翻转,欢迎指出错误。
1、递归版本
调用:
2、非递归版本
调用:
实现如下:
1、递归版本
调用:
ListNode * head = NULL; reverseRec(root, head);//head即为反转后得链表头实现如下:
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; }
2、非递归版本
调用:
ListNode *head = reverse(root);//head即为翻转后的链表头
实现如下:
ListNode* reverse(ListNode *root) { if (root == NULL || root->next == NULL) return root; ListNode *cur = root; ListNode *reverseHead = NULL; ListNode *pre = NULL; while (cur != NULL) { ListNode *tmp = cur->next; if(tmp == NULL){ reverseHead = cur; } cur->next = pre; pre = cur; cur = tmp; } return reverseHead; }
相关文章推荐
- 链表反转(使用递归和非递归两种方式)
- 单链表递归和非递归两种翻转方法(手写链表)
- 【面试题】单链表反转-递归和非递归
- 反转单链表 递归与非递归
- 链表的反转(递归实现和非递归实现)
- 反转链表(递归与非递归)
- 单链表反转(递归和非递归)
- 单链表反转(递归和非递归)
- 单链表翻转(递归与非递归)
- 链表反转--递归与非递归
- 边看边写(链表反转(递归和非递归))
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 链表反转的递归和非递归
- 单链表反转(递归和非递归) (Java)
- 数据结构学习笔记1-链表反转(递归与非递归)
- 链表的建立与反转(递归反转和非递归反转)
- 递归方法反转单向链表(C/C++)
- 剑指Offer系列---(18)反转链表(递归与非递归实现)
- 链表反转C实现(递归与循环)
- 递归和非递归实现链表反转