求:
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 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; }
来源:oschina
链接:https://my.oschina.net/u/4469818/blog/4333678