剑指 Offer 06. 从尾到头打印链表

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

示例 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 }

剑指 Offer 06. 从尾到头打印链表

 

代码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 }

剑指 Offer 06. 从尾到头打印链表

 

上一篇:Jensen不等式证明


下一篇:Linux ln命令