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

剑指 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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章