剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 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) {
//要求逆序打印,即先进后出——栈
//若不借助栈,首先遍历将链表长度确定,之后申请同长度的数组,从后向前放入数据即可。
//初始化
Stack<ListNode> stack_num = new Stack<ListNode>();
//从头节点开始遍历,将数据压栈
ListNode cur_point = head;
while(cur_point != null){
stack_num.push(cur_point);
cur_point = cur_point.next;
}
//声明数据元素的存储空间,长度为栈的大小
//此处需给最初的栈的长度对应一个int存储空间,后续pop之后大小会发生变化***
int stack_size = stack_num.size();
int[] final_num = new int[stack_size];
for(int i = 0; i < stack_size; i++){
//将每次弹出的ListNode的val放入数组
final_num[i] = stack_num.pop().val;
}
return final_num;
}
}