写在前面
代码说明:代码的下载地址: 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; }