劍指 Offer 面試題(6-1)
題目
輸入一個鏈表的頭結點,按照 從尾到頭 的順序返回節點的值。
返回的結果用數組存儲。
樣例
輸入:[2, 3, 5]
返回:[5, 3, 2]
思路
在這裏我們不再解釋與反轉鏈表思路相同的做法(用三個指針,改變鏈表結構,想了解可以看這裏——反轉鏈表)
這裏我們提供另一種不改變鏈表結構的方式,首先我們審讀題意,將鏈表從尾到頭輸出,也就是類似於後進先出,這可以讓我們聯想到一種數據結構——棧,我們可以定義一個棧,然後遍歷這個鏈表,從頭到尾將每個值入棧,隨後再將棧中數據依次出棧,即可達到從頭到尾打印鏈表的目的,我使用了一個數組來模擬棧,下面是代碼
代碼
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] printListReversingly(ListNode head) {
int[] stack = new int[100010];
int idx = 0;
int length = 0;
while (head != null) {
stack[idx++] = head.val;
length++;
head = head.next;
}
int[] res = new int[length];
for (int i = 0; i < length; ++i) res[i] = stack[--idx];
return res;
}
}