题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*/
方法一:使用递归
代码如下;
public class Listnode {
ArrayList<Integer> al=new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null) {
printListFromTailToHead(listNode.next);
al.add(listNode.val);
}
return al;
}
}
方法二:使用栈
1.新建一个栈,并把原来链表中的值一个一个地push进栈中,当结束时,栈头的值就是原来链表中末尾的值。
Stack stack = new Stack();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
2.把栈头的数一个一个加入到ArrayList里面,所以ArrayList的顺序就和栈的一样,即和链表的相反了啦!
while (!stack.empty()) {
list.add(stack.pop());
}
完整代码如下:
public ArrayList printListFromTailToHead1(ListNode listNode) {
ArrayList list = new ArrayList();
Stack stack = new Stack();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
while (!stack.empty()) {
list.add(stack.pop());
}
return list;
}