题目
输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
解题思路 一、栈第一个遍历的节点最后一个输出,而最后一个比遍历到的节点第一个输出(后进先)
public static ArrayList二、递归(重点理解)printListFromTailToHead(ListNode listNode){ ArrayList list = new ArrayList<>(); Stack stack = new Stack<>(); while(listNode != null){ stack.push(listNode.val); listNode = listNode.next; } while(!stack.empty()){ list.add(stack.pop()); } return list; }
public ArrayListprintListFromTailToHead(ListNode listNode) { ArrayList ret = new ArrayList<>(); if (listNode != null) { ret.addAll(printListFromTailToHead(listNode.next)); ret.add(listNode.val); } return ret; }
public static void test2(ListNode node){ if(node != null){ if(node.next != null){ test2(node.next); } } System.out.println(node.val); }总结
当链表非常长时,常用递归的方法会导致函数调用的层级很深,从而有可能导致函数调用栈溢出,显然用栈基于循环实现的代码鲁棒性更好。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75525.html
摘要:导航小助手剑指从尾到头打印链表题目详情解题思路源代码总结剑指从尾到头打印链表题目详情输入一个链表的头节点,从尾到头反过来返回每个节点的值用数组返回。时间复杂度方法先反转链表并求长度,在将反转后的链表数据拷贝至数组中。 ...
摘要:题目描述输入一个链表,按链表值从尾到头的顺序返回一个。最后别忘了,从尾到头遍历链表,不要忘了将你的结果进行翻转。 题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 分析 要了解链表的数据结构: val属性存储当前的值,next属性存储下一个节点的引用。 要遍历链表就是不断找到当前节点的next节点,当next节点是null时,说明是最后一个节点,停止遍历。 最...
摘要:题目输入一个链表的头节点,从尾到头反过来返回每个节点的值用数组返回。 题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0
摘要:面试题从尾到头打印链表输入一个链表,从尾到头打印链表每个节点的值面试题重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。例如输入前序遍历序列和中序遍历序列,则重建二叉树并返回。队列中的元素为类型。其中负数用补码表示。 面试题2 单例(之前有整理,略) 面试题3 二维数组中的查找 public boolean find(int target, int [][] arra...
摘要:一定要认真看分析注释题目要求题目描述输入一个链表,从尾到头打印链表每个节点的值。分析因为链表只有知道当前结点才能知道下一结点,所以不可能直接从后往前打印。 一定要认真看 分析 | 注释 | 题目要求 Question 1 题目描述:输入一个链表,从尾到头打印链表每个节点的值。 分析:因为链表只有知道当前结点才能知道下一结点,所以不可能直接从后往前打印。这种逆序的算法(策略)我们常用栈这...
阅读 4962·2021-11-25 09:43
阅读 1681·2021-10-27 14:18
阅读 1053·2021-09-22 16:03
阅读 1343·2019-08-30 13:19
阅读 1569·2019-08-30 11:15
阅读 1641·2019-08-26 14:04
阅读 3121·2019-08-23 18:40
阅读 1162·2019-08-23 18:17