欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指 Offer 06. 从尾到头打印链表

程序员文章站 2022-06-17 17:20:25
...

1. 题目

剑指 Offer 06. 从尾到头打印链表

2. 描述

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

示例 1:

输入: head = [1,3,2]

输出: [2,3,1]

限制:

0 <= 链表长度 <= 10000

3. 实现方法

3.1 方法 1

3.1.1 思路

  1. 借助栈的特点,先进后出,我们只需要将链表的元素存入栈中,然后从栈中取出元素,此时取出的顺序就是按照链表元素存入的反序;
  2. 此时将栈中取出的元素存入列表中返回即可;
  3. 主要进行取出链表元素并入栈,此时时间复杂度为 O(n)O(n)nn 为链表元素个数;
  4. 然后进行出栈并存入操作,此时时间复杂度为 O(n)O(n);
  5. 最终的时间复杂度为 O(n)+O(n)=2O(n)O(n) + O(n) = 2O(n),即 O(n)O(n)

3.1.2 实现

public int[] reversePrint(ListNode head) {
    // 利用栈来存储链表元素,由于是先进后出的数据结构,所以从头到尾存储链表元素,最后出栈时即为从尾到头打印链表元素
    Stack<Integer> stack = new Stack<>();

    // 入栈
    while (head != null) {
        stack.push(head.val);
        head = head.next;
    }

    int[] ans = new int[stack.size()];

    // 出栈并存储到数组中
    for (int i = 0; i < ans.length; i++) {
        ans[i] = stack.pop();
    }

    return ans;

}

剑指 Offer 06. 从尾到头打印链表