题目描述
输入一个链表,从尾到头打印链表每个节点的值。
思路
- 用栈(不会改变原链表的结构)
- 将结点放入栈
- 从栈中取出,放到链表中
- 返回链表
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<ListNode> stack = new Stack<>();
// 注意这个方法要求返回的是ArrayList类型,不能用List<Integer>定义
ArrayList<Integer> list = new ArrayList<>();
// 将结点放入栈
while (listNode != null) {
stack.push(listNode);
// 继续放下一个
listNode = listNode.next;
}
// 从栈中取出结点,再pop到链表里
while (!stack.empty()) {
ListNode tmp = stack.pop();
// 注意list包含的是Integer,所以add时添加的是val
list.add(tmp.val);
}
return list;
}
}
- 递归(本质上就是一个栈结构)
- 访问到一个结点,就先递归输出其next,再输出自身
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if (listNode != null) {
list.addAll(printListFromTailToHead(listNode.next));
list.add(listNode.val);
}
return list;
}
}