?歡迎來到劍指offer好題精選專欄,一起學習,一起進步?
題目資訊:
輸入一個鏈表的頭節點,按鏈表從尾到頭的順序回傳每個節點的值(用陣列回傳),
如輸入{1,2,3}的鏈表如下圖:

回傳一個陣列為[3,2,1]
0 <= 鏈表長度 <= 10000
示例1:
輸入:{1,2,3}
回傳值:[3,2,1]
示例2:
輸入:{67,0,24,58}
回傳值:[58,24,0,67]
解題思路:
1、申請一個堆疊Stack,一個參考節點cur,遍歷鏈表,如果cur不為空,就將cur的val值放到堆疊里,最后在從堆疊里一個一個取出來放到結果的ArrayList中,
2、逆置陣列,將鏈表里的val值都放進結果ArrayList中,遍歷ArrayList將陣列中的元素逆置,
代碼如下:
方法1:
/**
* 1、堆疊
*/
class Solution1{
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack=new Stack<>();
while (listNode!=null){
stack.push(listNode.val);
listNode=listNode.next;
}
ArrayList<Integer> list=new ArrayList<>();
while (!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}
}
方法2:
/**
* 陣列逆置
*/
class Solution2{
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
while (listNode != null) {
list.add(listNode.val);
listNode = listNode.next;
}
int i = 0;
int j = list.size() - 1;
while (i < j) {
Integer tmp = list.get(i);
list.set(i, list.get(j));
list.set(j, tmp);
i++;
j--;
}
return list;
}
}
是不是很簡單?

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300472.html
標籤:其他
