题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
思路一:从头到尾读取链表值,依次插入ArrayList首部
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result=new ArrayList<Integer>();
while(listNode!=null){
result.add(0,listNode.val);
listNode=listNode.next;
}
return result;
}
}
此思路的关键在于add(0,listNode.val)
思路二:从尾到头打印链表,相当于从头到尾将链表值入栈,之后出栈
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> st=new Stack<Integer>();
ArrayList<Integer> result=new ArrayList<Integer>();
while(listNode!=null){
st.push(listNode.val);
listNode=listNode.next;
}
while(!st.isEmpty()){
result.add(st.pop());
}
return result;
}
}
Stack类的方法:
序号 | 方法描述 |
---|---|
1 | boolean empty() 测试堆栈是否为空。 |
2 | Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。 |
3 | Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
4 | Object push(Object element) 把项压入堆栈顶部。 |
5 | int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。 |
N:注意使用时要记得import java.util.Stack