剑指 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 }
复制代码

 

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

 

posted @   堤苏白  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示