剑指 Offer 06. 从尾到头打印链表
题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
题解思路
1>源代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
import java.util.Stack;
class Solution {
public int[] reversePrint(ListNode head) {
Stack<Integer> stack = new Stack();
while(head!=null){
stack.push(head.val);
head = head.next;
}
int size = stack.size();
int[] out = new int[size];
for(int i=0;i<size;i++){
out[i] = stack.pop();
}
return out;
}
}
2>算法介绍
本题要求倒序输出链表的节点值,这让我立刻想到了树的后序遍历。后序遍历有两种写法,递归法与迭代法,本题要求我们将节点值倒序存储进一个数组中。如果是使用python来完成,我肯定会使用递归法,但是java我暂时还不是特别熟悉,所以我们不妨借用这个机会来学习一下java中栈的使用方法。
代码的整体思路非常简单,根据栈先进后出的特点,在遍历链表的时候将节点的值入栈,最后一个个出栈就可以了。