题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:
private static class ListNode {private int value;private ListNode next;public ListNode(int value) {this.value = value;}}
如果只是反过来打印节点的值,那么很简单,只要遍历链表,将节点的值 push 到一个栈里面,因为栈的特点是后进先出,所以最后我们遍历栈,达到的效果就是将链表从尾到头打印,如下
public static void printListReverse(ListNode root) {if (root == null) {return;}Stack<Integer> stack = new Stack<>();ListNode cur = root;// 遍历链表 将值添加到栈中while (cur != null) {stack.push(cur.value);cur = cur.next;}// 遍历栈 打印栈头的值while (!stack.isEmpty()) {System.out.println(stack.pop());}}
另外一种方法就是使用递归,对于任意一个节点,反过来打印即先打印下一个节点,然后在打印当前节点,如下
public static void printListReverse2(ListNode root) {// 既是递归退出的条件 也是对传入的链表进行检查if (root == null) {return;}printListReverse2(root.next);System.out.println(root.value);}
