6.从尾到头打印链表
题目
【6.从尾到头打印链表】输入链表的第一个节点,从尾到头反过来打印出每个结点的值。
文章图片
思路
1.使用栈 O(N)+O(N)
public ArrayList printListFromTailToHead(ListNode listNode) {
Stack stack = new Stack<>();
while (listNode != null) {
stack.add(listNode.val);
listNode = listNode.next;
}
ArrayList ret = new ArrayList<>();
while (!stack.isEmpty())
ret.add(stack.pop());
return ret;
}
2.使用递归
public ArrayList printListFromTailToHead(ListNode listNode) {
ArrayList ret = new ArrayList<>();
if (listNode != null) {
ret.addAll(printListFromTailToHead(listNode.next));
ret.add(listNode.val);
}
return ret;
}
3.头插法 O(N)+O(1)
public ArrayList printListFromTailToHead(ListNode listNode) {
// 头插法构建逆序链表
ListNode head = new ListNode(-1);
while (listNode != null) {
ListNode memo = listNode.next;
listNode.next = head.next;
head.next = listNode;
listNode = memo;
}
// 构建 ArrayList
ArrayList ret = new ArrayList<>();
head = head.next;
while (head != null) {
ret.add(head.val);
head = head.next;
}
return ret;
}
4.使用Collections.reserve方法
public ArrayList printListFromTailToHead(ListNode listNode) {
ArrayList ret = new ArrayList<>();
while (listNode != null) {
ret.add(listNode.val);
listNode = listNode.next;
}
Collections.reverse(ret);
return ret;
}
推荐阅读
- Java|规范的打印日志
- Excel基础知识-打印的那些事(上)
- 踌躇满志想创业,结果到头来两手空空
- C/C++|C/C++ basis 02
- 用python实现PDF解密打印文件
- day8:作业
- 打印从1到最大的n位数
- RT-Thread|RT-Thread 入门学习笔记(vsnprintf来替代rt_vsnprintf来打印浮点)
- 复盘Day94|复盘Day94 如何做到头脑开放
- 每日一画(044)