递归的代码比迭代的代码看起来更清爽一些,也是由于递归对行为进行了抽象吧。

注意到,这是一个尾递归函数。一些编译器会将它优化为迭代,这样一方面,在代码层面保持了清晰的逻辑和可读性。一方面保持了代码的性能。

代码:

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);
}
}
};

最新文章

  1. T-SQL 拆分使用指定分隔符的字符串(split string)
  2. CSS 透明度 设置 兼容IE FF
  3. jq获取鼠标位置
  4. AngularJS学习--- AngularJS中数据双向绑定(two-way data-binding) orderBy step4
  5. APP前端公共测试点
  6. 《Code Complete》ch.29 集成
  7. 编译安装zabbix
  8. SQL Server 数据库备份到域中别的机器上
  9. 谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题
  10. (转)Memcached 在windows下的java使用
  11. oracle安装时,条件检查不通过解决办法
  12. 前端自动化测试漫长路之——Selenium初探
  13. Python 学习教程汇总
  14. Git的使用-如何将本地项目上传到Github
  15. 中缀表达式得到后缀表达式(c++、python实现)
  16. 爬虫之抓取js生成的数据
  17. Harbor--企业级项目管理
  18. bzoj2989&&4170数列——二进制分组+主席树
  19. css部分复习整理
  20. POJ 2109 巧妙解法

热门文章

  1. HDU 1496 Equations(哈希表)
  2. bean实例化--工厂方法
  3. linux 之创建文件命令
  4. ubuntu10.10编译TQ2440的x86-qtopia-2.2.0具体问题总结及原因分析
  5. python定时执行方法
  6. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
  7. Java取得操作系统的临时目录
  8. ubuntu 12.04上安装wn725n无线网卡驱动
  9. urlib2 标准代码
  10. zabbix监控sockets连接数