3.从尾到头打印链表
-
题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
第一种方法:可以构建一个栈,先遍历一遍链表,把结点都压栈,然后将栈中的结点依次弹出并将每个结点的值加入list中直至栈为空。
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list=new ArrayList<>();
if(listNode==null)
return list;
Stack<ListNode> stack=new Stack<>();
while(listNode!=null)
{
stack.push(listNode);
listNode=listNode.next;
}
while(!stack.isEmpty())
{
list.add(stack.pop().val);
}
return list;
}
第二种方法:利用递归,要想先加入最后一个结点的值,需要先递归到最后一个结点,然后加入list中,依次将递归函数返回,从后往前依次将结点的值加入list中,其中list需要声明为全局变量,最后实现从尾到头的打印。
public class Solution {
ArrayList<Integer> list=new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode==null)
return list;
printListFromTailToHead(listNode.next);
list.add(listNode.val);
return list;
}
}