leetcode剑指 Offer 06(从尾到头打印链表)--Java语言实现

∥☆過路亽.° 提交于 2020-08-11 22:57:24

求:

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

 

示例 1:

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

限制:

0 <= 链表长度 <= 10000

 

题目链接: https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/

 

解:

非常常规的题目,因为题目的特点是先进后出,所以联想到栈,先遍历链表,将值放入栈中,最后再从栈中弹出元素,逐个加入ret数组。最后返回ret数组。

时间复杂度:O(n)
空间复杂度:O(n)

public int[] reversePrint(ListNode head) {
    Deque<Integer> helpStack = new LinkedList<>();
    for (ListNode p = head; p != null; p = p.next)
        helpStack.push(p.val);
    int size = helpStack.size();
    int ret[] = new int[size];
    for (int k = 0; k < size; k++)
        ret[k] = helpStack.pop();
    return ret;
}

如果不用栈也可以做,这样可以省去栈的空间,但是思路上感觉没有方法1清晰。

时间复杂度:O(n)
空间复杂度:O(n)

public int[] reversePrint(ListNode head) {
    int len = 0, k = 0;
    for (ListNode currNode = head; currNode != null; currNode = currNode.next) {
        ++len;
    }
    int ret[] = new int[len];
    for (ListNode currNode = head; currNode != null; currNode = currNode.next) {
        ret[len - 1 - k] = currNode.val;
        ++k;
    }
    return ret;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!