JZ6 从尾到头打印链表
题目:
思路:
【1】思路一:先是遍历一遍链表压入栈中,然后从栈中弹出到数组中。利用了栈的先进后出的特性来实现从尾到头的顺序返回。
【2】思路二:利用递归的方式,利用调用栈叠加的方式,先从最末尾的节点开始处理,最后处理头节点。
代码展示:
public class ListNode { public int val; public ListNode next = null; public ListNode(int val) { this.val = val; } } //从尾到头打印链表 public class JZ6 { public static void main(String[] args) { ListNode Node1,Node2,Node3,Node4; Node1 = new ListNode(1); Node2 = new ListNode(2); Node1.next = Node2; Node3 = new ListNode(3); Node2.next = Node3; Node4 = new ListNode(4); Node3.next = Node4; System.out.println(Method1(Node1)); } //利用数组的的头插法实现【运行时间 244ms 占用内存 17888KB】 public static ArrayList<Integer> Method2(ListNode listNode) { ArrayList<Integer> list = new ArrayList<Integer>(); while (listNode!=null){ list.add(0,listNode.val); listNode = listNode.next; } return list; } //利用递归实现【运行时间 239ms 占用内存 19512KB】 public static ArrayList<Integer> Method1(ListNode listNode) { if (listNode == null){ ArrayList<Integer> dlist = new ArrayList<Integer>(); return dlist; }else { ArrayList<Integer> dlist = Method1(listNode.next); dlist.add(listNode.val); return dlist; } } //常见的递归方式【运行时间 203ms 占用内存 18704KB】 public static ArrayList<Integer> lists = new ArrayList(); public ArrayList<Integer> Method11(ListNode listNode) { if(listNode!=null){ Method11(listNode.next); lists.add(listNode.val); } return lists; } }
分类:
leetcode题目
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?