题目描述
输入一个链表的头节点,从尾到头反过来打印出每个节点的值
题解
解法一:改变链表的指向,然后从头到尾输出。需要改变链表的结构,不推荐。
解法二:使用栈的“先进后出”特点,从头到尾遍历的过程中依次入栈,再从栈中取出元素输出。需要借助栈的存储结构。
代码实现:
public static void printNode(Node node){
Stack<Integer> stack = new Stack<>();
Node head = node;
while (head != null){
stack.push(head.val);
head = head.next;
}
while (!stack.isEmpty()){
System.out.println(stack.pop());
}
}
解法三:根据解法二很自然能想到使用递归的方式求解,因为递归本质上就是一个栈结构。每次访问时,先递归输出它后面的节点,再输出该节点,实现逆向输出。缺点是链表很长的时候,会导致递归层级更深,从而引发栈溢出。相对而言使用栈基于循环实现的代码鲁棒性更好。
代码实现:
public static void printNode(Node node){
if (node != null) {
if (node != null) {
printNode(node.next);
}
System.out.println(node.val);
}
}