题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
递归法
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> ret = new ArrayList();
if(listNode != null){
ret.addAll(printListFromTailToHead(listNode.next));
ret.add(listNode.val);
}
return ret;
}
}
头插法
维护后继关系,利用辅助头结点。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode head = new ListNode(0);
while(listNode != null){
ListNode tmp = listNode.next;
listNode.next = head.next;
head.next = listNode;
listNode = tmp;
}
//构建ArrayList
ArrayList ret = new ArrayList();
head = head.next;
while(head != null){
ret.add(head.val);
head = head.next;
}
return ret;
}
}
利用栈
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
Stack st = new Stack<>();
while(listNode != null){
st.push(listNode.val);
listNode = listNode.next;
}
ArrayList ret = new ArrayList<>();
while(!st.isEmpty()){
ret.add(st.pop());
}
return ret;
}
}
复习栈的使用:
“java.util.Stack 在 jdk java.util 包里面, 也是 java 集合框架的重要组成部分
Stack s1 = new Stack();
1.boolean empty()
测试堆栈是否为空。
2.Object push(Object element)
把项压入堆栈顶部。
3.Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。