剑指offer —— 从尾到头打印链表
1.问题:输入一个链表,从尾到头打印链表每个节点的值。
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { } }
2.思路:①使用递归
②使用迭代之后再反转 list
③使用 Stack , 利用它的 LIFO(后进先出) 的特性(前提是允许使用 Stack)
3.代码:
①:使用递归
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> result = new ArrayList<>(); if(listNode != null){ addToList(listNode,result); } return result; } public void addToList(ListNode listNode,ArrayList<Integer> result){ if(listNode.next != null){ getNode(listNode.next,result); } //只有在当前节点中没有下个节点的时候才会执行添加方法 result.add(listNode.val); }
②:使用迭代之后再反转 list
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> tempList = new ArrayList<>(); while(listNode != null){ tempList.add(listNode.val); listNode = listNode.next; } ArrayList<Integer> result = new ArrayList<>(tempList.size()); for(int i = tempList.size()-1; i >= 0; i--){ result.add(tempList.get(i)); } return result; }
③:使用 Stack , 利用它的 LIFO(后进先出) 的特性
import java.util.Stack; import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack = new Stack<>(); while(listNode != null){ stack.push(listNode.val); listNode = listNode.next; } ArrayList<Integer> result = new ArrayList<>(stack.size()); while(!stack.isEmpty()){ result.add(stack.pop()); } return result; } }
本文来自博客园,作者:君子如珩~,转载请注明原文链接:https://www.cnblogs.com/shulipeng/p/9017291.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义