题目要求:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
利用栈实现的思路
对于链表数据的打印,如果是从头到尾的打印一般我们直接通过while循环判断Node.next是否存在来逐个打印即可,但是这里要求的是从尾到头的打印存放到ArrayList,这里可以使用栈的数据结构“后进先出”的特性来实现。也就是先把全部节点进栈存储,然后再弹栈遍历,思路简单。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> temp = new Stack<>(); //建立一个栈
ArrayList<Integer> newList = new ArrayList<>();
ListNode t = listNode;
//将数据都先存入栈中
while( t != null ){
temp.push(t.val);
t = t.next;
}
//遍历栈
while( !temp.empty() ){
newList.add(temp.pop());
}
return newList;
}
}
递归实现的思路:
通过每次递归调用打印的方法,传入参数是ListNode.next,直到最后一个节点开始存入到ArrayList。
public class Main {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
this.printListFromTailToHead(listNode.next);
//到最后一个节点的时候开始存储数据到list中,从尾到头储存
arrayList.add(listNode.val);
}
return arrayList;
}
}
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
网友评论