每天一道算法题——从尾到头输出链表
2017-11-18 17:47
302 查看
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
测试用例:
{67,0,24,58}
对应输出应该为:
[58,24,0,67]
1.使用递归,但是此方法不适用于长链表。
2.利用栈的“后进先出”的特点来实现从尾部打印:
测试结果:
第一种:22ms
第二种:18ms
输入一个链表,从尾到头打印链表每个节点的值。
测试用例:
{67,0,24,58}
对应输出应该为:
[58,24,0,67]
1.使用递归,但是此方法不适用于长链表。
import java.util.ArrayList; public class Test1 { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if (listNode!=null) { this.printListFromTailToHead(listNode.next);//此处递归至最后一值。 arrayList.add(listNode.val);//将各递归结果依次传入ArrayList } return arrayList; } } class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }
2.利用栈的“后进先出”的特点来实现从尾部打印:
import java.util.ArrayList; import java.util.Stack; public class Test1 { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack = new Stack<Integer>(); while (listNode!=null) { stack.push(listNode.val); listNode = listNode.next; } while(!stack.isEmpty()){ arrayList.add(stack.pop());//取出栈头的值,即尾部。加入ArrayList。 } return arrayList; } } class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }
测试结果:
第一种:22ms
第二种:18ms
相关文章推荐
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 每天一道算法题——合并两个排序的链表
- 每天一道算法题——链表中倒数第k个结点
- 每天一道算法题(8)——把二元查找树转变成排序的双向链表
- 每天一道算法题(8)——把二元查找树转变成排序的双向链表
- 每天学习一算法系列(13) (输入一个单向链表,输出该链表中倒数第k个结点)
- 每天一道算法题11 找出两个链表的第一个公共结点
- 每天一道算法题(32)——输出数组中第k小的数
- 每天一道算法题目(20)——复杂链表的拷贝
- 每天一道算法题(32)——输出数组中第k小的数
- 每天一道算法题目(20)——复杂链表的拷贝
- 每天一道算法题(16)——合并已排序的链表
- 校招准备系列:每天一道算法题(12)-从尾到头打印链表
- 每天一道算法题(16)——合并已排序的链表
- 校招准备系列:每天一道算法题(14)-合并两个排序的链表
- 每天一道算法题——链表反转
- 每天一道算法题2 删除链表结点(时间复杂度为O(1)))
- 每天一道算法题(16)——翻转链表
- 每天一道算法题(4)——O(1)时间内删除链表节点
- 每天一道算法题(16)——翻转链表