写在前面
代码说明:代码的下载地址: https://github.com/WuNianLuoMeng/Coding
视频说明:第一次以这样的形式录视频,如果有哪里说的不对,还请各位及时指出,谢谢~
从尾到头打印链表 视频链接
方法一:通过Java中的Stack类去模拟栈的过程
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
while(listNode != null) {
stack.add(listNode.val); /// 取当前节点的值放入栈中
listNode = listNode.next; /// 更新当前节点为下一个节点
}
while (!stack.isEmpty()) {
list.add(stack.pop()); /// 取出当前栈顶元素然后放入list中
}
return list;
} 方法二:采用递归的方式去模拟链表反置的作用
private static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if (listNode == null) {
return list;
}
return solve(list, listNode);
}
// 1->2->3->4
private static ArrayList<Integer> solve(ArrayList<Integer> list, ListNode listNode) {
if (listNode.next != null) { /// 当前节点的下一个节点不为空
list = solve(list, listNode.next); /// 往下递归
}
list.add(listNode.val);
// System.out.println(list);
return list;
} 
京公网安备 11010502036488号