剑指Offer(面试题6-1)——从尾到头打印链表

剑指 Offer 面试题(6-1)

题目

输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。

返回的结果用数组存储。

样例

1
2
输入:[2, 3, 5]
返回:[5, 3, 2]

思路

​ 在这里我们不再解释与反转链表思路相同的做法(用三个指针,改变链表结构,想了解可以看这里——https://blog.csdn.net/scfor333/article/details/104968798

​ 这里我们提供另一种不改变链表结构的方式,首先我们审读题意,将链表从尾到头输出,也就是类似于后进先出,这可以让我们联想到一种数据结构——栈,我们可以定义一个栈,然后遍历这个链表,从头到尾将每个值入栈,随后再将栈中数据依次出栈,即可达到从头到尾打印链表的目的,我使用了一个数组来模拟栈,下面是代码

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 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;
}
}
-------------本文结束感谢您的阅读-------------