题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
算法思路
首先分析这道题,由于链表不能够从后往前遍历,只能够重头开始,但是题目要求逆序输出各个节点的值,所以利用辅助栈(先入后出)的方法来实现。
具体方法是从头开始将链表的值入栈,然后依次出栈,就实现了逆序。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
if(head == null) return new int[0];
Stack<Integer> s = new Stack<>();
s.push(head.val);
while(head.next != null){
head = head.next;
s.push(head.val);
}
int[] res = new int[s.size()];
for(int i = 0;i < s.size();i++)
res[i] = s.pop();
return res;
}
}
复杂度
时间复杂度和空间复杂度都是O(N)。