您的位置:首页 > 其它

每天一道算法题——从尾到头输出链表

2017-11-18 17:47 302 查看
题目描述

输入一个链表,从尾到头打印链表每个节点的值。

测试用例:

{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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 链表 递归 优化