题目

剑指 Offer 06. 从尾到头打印链表

思路1(递归)

  • 首先先遍历整个脸表,计算出链表的长度(用于初始化数组)。然后进行递归,从链表头部递归到尾部,这期间什么都不做,直到递归到最后一个节点的时候开始返回,开始返回的同时吧当前节点的值加入到res数组

代码

class Solution {
int[] res;
int index = 0; public int[] reversePrint(ListNode head) {
// 先统计链表的总节点数量
int count = 0;
ListNode temp = head;
while (temp != null) {
count++;
temp = temp.next;
}
res = new int[count]; // 进行递归
help(head); // 输出结果
return res;
} public void help(ListNode node) {
if (node == null) {
return;
}
help(node.next);
res[index++] = node.val;
}
}

复杂度分析

  • 时间复杂度:\(O(N)\),遍历一遍链表所花费的时间
  • 空间复杂度:\(O(N)\),递归所需要的空间

思路2(栈)

  • 使用栈的先进后出FILO原则,顺序遍历链表,将链表的元素依次加入到栈中。接下来将栈的元素一个个pop弹出来放到res数组中即可(因为是先进先出,所以此时栈的最后一个元素要先弹出,因此可以实现从尾到头遍历)

代码

class Solution {
public int[] reversePrint(ListNode head) {
// 将链表的元素依次入栈
LinkedList<Integer> stack = new LinkedList<>();
while (head != null) {
stack.push(head.val);
head = head.next;
} int[] res = new int[stack.size()];
// 将栈元素弹出放到res中
int index = 0;
while (!stack.isEmpty()) {
res[index++] = stack.pop();
} return res;
}
}

复杂度分析

  • 时间复杂度:\(O(N)\)
  • 空间复杂度:\(O(N)\),辅助栈使用了\(O(N)\)的空间

最新文章

  1. BZOJ4373 : 算术天才⑨与等差数列
  2. .htaccess的应用
  3. Android定时器实现方法[转]
  4. 【问题】Win7 系统下 Firefox hostadmin插件无法修改Host
  5. .NET支持上下左右移动操作
  6. (017)将一棵二叉查找树重构成链表(keep it up)
  7. imageNamed 与 initWithContentsOfFile 区别
  8. Java虚拟机内存溢出异常--《深入理解Java虚拟机》学习笔记及个人理解(三)
  9. MT【254】值域包含值域
  10. Laravel 执行流程(一)之自动加载
  11. Android-Java-饿汉式单例模式(内存图)
  12. 引导修复软件boot-repair
  13. 【错误记录】flask mysql 死锁
  14. java 反编译 android 反编译
  15. BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集
  16. redis有序集合类型sort set
  17. 虚拟机安装CentOS,网络配置
  18. 27、简述redis的有哪几种持久化策略及比较?
  19. C#日期时间类型格式化大全集 C#DateTime 类型格式化大全集
  20. struts2 具体学习资料

热门文章

  1. ECShop 文章添加缩略图功能
  2. disruptor笔记之一:快速入门
  3. 3. Go并发编程--数据竞争
  4. appium+python自动化:获取元素属性get_attribute
  5. python学习笔记(四)-文件操作
  6. Python3入门系列之-----字符串
  7. 通过Python收集MySQL MHA 部署及运行状态信息的功能实现
  8. JDBC连接mariadb时使用依赖
  9. t-SNE 从入门到放弃
  10. mysql增删改查——条件查询+模糊查询