題目
輸入一個(gè)鏈表,按鏈表值從尾到頭的順序返回一個(gè)ArrayList。
程序核心思想
- 從“從尾到頭”就可以聯(lián)想到棧,所以這個(gè)題目用java中自帶的棧來解決“從尾到頭”的要求。把所有的節(jié)點(diǎn)值入棧,然后節(jié)點(diǎn)值出棧進(jìn)入ArrayList,最后返回ArrayList即可。
- 剩下來就是鏈表遍歷的問題了??梢詎ew一個(gè)節(jié)點(diǎn),指向鏈表頭,然后依次指向后面的節(jié)點(diǎn),進(jìn)行遍歷,直到鏈表結(jié)尾為止(new的節(jié)點(diǎn)指向的節(jié)點(diǎn)的next為null)。
Tips
- 棧的使用
創(chuàng)建:Stack<Integer> stack = new Stack<Integer>();
入棧:stack.push(括號(hào)里填入棧的東西,類型為創(chuàng)建時(shí)泛型的類型)
出棧:stack.pop();
判斷棧是否為空:stack.empty(); - ArrayList的使用
創(chuàng)建:ArrayList<Integer> array = new ArrayList<Integer>();
添加元素:array.add(括號(hào)里填添加的東西,類型為創(chuàng)建時(shí)泛型的類型)
代碼
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = 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> array = new ArrayList<Integer>();
ListNode node = new ListNode(0);
node.next = listNode;
while(node.next != null){
stack.push(node.next.val);
node.next = node.next.next;
}
while(!stack.empty()){
array.add(stack.pop());
}
return array;
}
}