题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
代码:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public int[] reversePrint(ListNode head) { 11 if(head==null){return new int[0];} //链表为空,输出空数组 12 List<Integer> list=new ArrayList<>(); //集合中不能放基础数据类型 13 ListNode ln=head; 14 while(ln!=null){ 15 list.add(0,ln.val); //每次都加在最前面,从而实现逆置 16 ln=ln.next; 17 } 18 int[] result=new int[list.size()]; 19 for(int i=0;i<list.size();i++){ 20 result[i]=list.get(i); //循环将值从集合中取出放入数组中,自动拆箱 21 } 22 return result; 23 } 24 }
代码2:
1 class Solution { 2 public int[] reversePrint(ListNode head) { 3 if(head==null){return new int[0];} 4 Stack<ListNode> stack=new Stack<>(); 5 ListNode ln=head; 6 while(ln!=null){ 7 stack.push(ln); 8 ln=ln.next; 9 } 10 int size=stack.size(); //栈的大小size会随着你取出值而改变所以for里面不能用stack.size() 11 int[] result=new int[size]; 12 for(int i=0;i<size;i++){ 13 result[i]=stack.pop().val; 14 } 15 return result; 16 } 17 }