反转链表:迭代和递归的实现
来源:互联网 发布:淘宝怎么上第三方活动 编辑:程序博客网 时间:2024/06/03 17:16
迭代
将链表看成两部分,一部分是已经反转的部分,一部分是未反转的部分。为此定义两个变量:
temp : 保存未反转部分的头结点
pre : 保存已经反转部分的头结点
ListNode* reverseList(ListNode* head) { ListNode *pre = NULL; while(head) { ListNode *temp = head->next; head->next = pre; pre = head; head = temp; } return pre; }
递归
递归这里有点复杂,先给出代码。
ListNode* reverseList(ListNode* head) { //节点为空或者节点为链表末节点 if (!head || !(head -> next)) return head; ListNode* node = reverseList(head -> next); head -> next -> next = head; head -> next = NULL; return node; }
这里的head->next->next有点费解。可以看下面的示意图:
比如说运行到第三步,value = 2为头结点,这个节点保存了value = 3这个节点的位置。value = 3这个节点已经被反转了,作为已经反转的部分的尾节点,所以需要将value = 2这个节点加到value这个节点的后边,然后将value = 2的next设置为NULL。
需要明白这一点,才能写出这个反转链表的递归。
阅读全文
1 0
- 反转链表的迭代实现和递归实现
- 反转链表:迭代和递归的实现
- 链表反转,递归,迭代
- 反转单链表--迭代和递归分别实现
- 写代码,反转一个单链表,分别以迭代和递归的形式来实现
- 链表反转的递归和非递归实现方式
- 链表反转的递归和非递归实现方式
- java-实现链表反转-递归和非递归实现
- 链表反转的实现(递归反转链表,非递归反转链表)
- 链表的反转(递归实现和非递归实现)
- 反转链表(递归和非递归实现)
- 递归和非递归实现链表反转
- 反转链表--递归和非递归实现
- 递归和非递归实现链表反转
- 链表的建立与反转(递归反转和非递归反转)
- factorial 阶乘的递归实现 和 迭代实现
- 二分查找的递归实现和迭代实现
- C++递归与非递归实现链表的反转
- mysql_01 简单介绍
- PC端和移动端的区别你知道吗?
- 用户态连接跟踪CT流表测试
- PAT-1031.查验身份证(15)
- keepalived的安装
- 反转链表:迭代和递归的实现
- Go-Web开发之数据存储
- 实现Android中更换头像功能
- fundamental_2017_12_9
- 移动web开发之像素和DPR
- 计算题
- Cannot find -lboost_python3 问题
- OkHttp的二次封装
- 全排列和组合数算法