链表倒序输出三种算法
来源:互联网 发布:大圣众娱牛牛源码 编辑:程序博客网 时间:2024/06/18 09:40
输入一个链表,从尾到头打印链表每个节点的值。一共有三种方法,第一种方法为我自己的方法,另外两种参考其他人的,分别为利用栈和利用递归。
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */
第一种方法:
public static ArrayList<Integer> printTailToHead1(ListNode listNode) { //定义一个变量来累计链表的节点数 int num = 1; ArrayList<Integer> a = new ArrayList<Integer>(); //累计节点数并将值加入集合 while(listNode != null) { a.add(listNode.val); listNode = listNode.next; num ++; } //头尾交换,讲集合里的节点倒序 for(int i = a.size() - 1,j = 0;i > j;j ++,i --) { int temp = a.get(i); a.set(i, a.get(j)); a.set(j, temp); } return a; }
方法2:利用栈
public static ArrayList<Integer> printTailToHead2(ListNode listNode) { //初始化一个栈,需要导入包java.util.stack Stack<Integer> stack = new Stack<Integer>(); ArrayList<Integer> list = new ArrayList<Integer>(); //将节点一次加入到栈 while(listNode != null) { stack.add(listNode.val); //讲节点后移 listNode = listNode.next; } //将节点从栈中取出,依次插入list while(!stack.isEmpty()) { list.add(stack.pop()); } return list; }
方法3:递归
public static ArrayList<Integer> printTailToHead2(ListNode listNode) { ArrayList<Integer> list = new ArrayList<Integer>(); //判断节点是否为空 if(listNode != null) { //判断下一个节点是否为空,为空则以下一个节点为参数递归 if(listNode.next != null) { list = printTailToHead2(listNode.next); } //最开始执行这条语句一定是最后一个节点 list.add(listNode.val); } return list; }
0 0
- 链表倒序输出三种算法
- 链表倒序输出三种算法
- 倒序输出链表
- 倒序输出链表
- 倒序输出链表
- 链表倒序输出
- C++算法之 倒序输出一个链表
- 链表倒序算法
- 链表倒序算法
- 递归倒序输出链表
- 链表的倒序输出
- 链表的倒序输出
- 链表的倒序算法
- 笔试面试之倒序输出链表
- 用栈倒序输出链表
- 倒序输出链表 统计学生信息
- 将一个链表倒序输出
- 算法--倒序打印链表--java
- python time模块和datetime模块详解
- Unity3D在2D游戏中利用UGUI实现分辨率自适应的一种可行实践方案
- 训练报错
- <HTTP协议详解>由浅入深看HTTP
- Android UI开发布局实例及有关代码
- 链表倒序输出三种算法
- Python datetime 模块之timedelta
- 计算语言学之绪论
- 机器学习python,k近邻分类器,三维作图
- 微信安全中心:将处罚使用清理僵尸粉外挂用户
- CRF L-BFGS Line Search原理及代码分析
- 【Matlab】Bootstrap
- MySQL事务隔离级别详解
- MongoDB学习笔记—Linux下搭建MongoDB环境