剑指 Offer 面试题(6-1)
题目
输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。
返回的结果用数组存储。
样例
输入:[2, 3, 5]
返回:[5, 3, 2]
思路
在这里我们不再解释与反转链表思路相同的做法(用三个指针,改变链表结构,想了解可以看这里——反转链表)
这里我们提供另一种不改变链表结构的方式,首先我们审读题意,将链表从尾到头输出,也就是类似于后进先出,这可以让我们联想到一种数据结构——栈,我们可以定义一个栈,然后遍历这个链表,从头到尾将每个值入栈,随后再将栈中数据依次出栈,即可达到从头到尾打印链表的目的,我使用了一个数组来模拟栈,下面是代码
代码
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] printListReversingly(ListNode head) {
int[] stack = new int[100010];
int idx = 0;
int length = 0;
while (head != null) {
stack[idx++] = head.val;
length++;
head = head.next;
}
int[] res = new int[length];
for (int i = 0; i < length; ++i) res[i] = stack[--idx];
return res;
}
}