題目描述
輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。
題目分析
可以使用遞歸,想要打印第一個就需要打印第二個。
也可以使用棧,利用棧的特性先進後出進行倒序輸出。
Java實現
節點類:
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
- 遞歸實現
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> list = new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
reverseList(listNode);
return list;
}
public void reverseList(ListNode head) {
if(head != null) {
reverseList(head.next);
list.add(head.val);
}
}
}
- 使用棧實現
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<Integer>();
ArrayList<Integer> list = new ArrayList<Integer>();
while(listNode != null){
stack.push(listNode.val);
listNode = listNode.next;
}
while(!stack.empty()){
list.add(stack.pop());
}
return list;
}
}