LeetCode 206. Reverse Linked List(迭代和递归两种实现)
2024-08-21 08:40:30
递归的代码比迭代的代码看起来更清爽一些,也是由于递归对行为进行了抽象吧。
注意到,这是一个尾递归函数。一些编译器会将它优化为迭代,这样一方面,在代码层面保持了清晰的逻辑和可读性。一方面保持了代码的性能。
代码:
class Solution
{
public:
ListNode* reverseList(ListNode* head)
{
// return iteratively(head);
return recursively(nullptr, head);
} private:
ListNode* iteratively(ListNode *head)
{
auto cur = head;
for (ListNode* pre = nullptr; cur != nullptr;)
{
if (cur->next == nullptr)
{
cur->next = pre;
return cur;
} else
{
swap(pre, cur->next);
swap(pre, cur);
}
}
return nullptr;
} // note that this tail recursive algo should be transformed into iterate algo to obtain the better performance
ListNode* recursively(ListNode *pre, ListNode *cur)
{
if (cur == nullptr)
{
return pre;
} else
{
swap(pre, cur->next);
return recursively(cur, pre);
}
}
};
最新文章
- T-SQL 拆分使用指定分隔符的字符串(split string)
- CSS 透明度 设置 兼容IE FF
- jq获取鼠标位置
- AngularJS学习--- AngularJS中数据双向绑定(two-way data-binding) orderBy step4
- APP前端公共测试点
- 《Code Complete》ch.29 集成
- 编译安装zabbix
- SQL Server 数据库备份到域中别的机器上
- 谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题
- (转)Memcached 在windows下的java使用
- oracle安装时,条件检查不通过解决办法
- 前端自动化测试漫长路之——Selenium初探
- Python 学习教程汇总
- Git的使用-如何将本地项目上传到Github
- 中缀表达式得到后缀表达式(c++、python实现)
- 爬虫之抓取js生成的数据
- Harbor--企业级项目管理
- bzoj2989&;&;4170数列——二进制分组+主席树
- css部分复习整理
- POJ 2109 巧妙解法