輸入一個連結串列的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。
示例 1:
輸入:head = [1,3,2]
輸出:[2,3,1]
限制:
0 <= 連結串列長度 <= 10000
方法一:棧
棧的特點是後進先出,即最後壓入棧的元素最先彈出,考慮到棧的這一特點,使用棧將連結串列元素順序導致。從連結串列的頭結點開始,依次將每個節點壓入棧內,然後依次彈出棧內的元素並儲存到陣列中。
建立一個棧,用於儲存連結串列的節點
建立一個指標,初始時指向連結串列的頭結點
當指標指向的元素非空時,重複下列操作:
- 將指標指向的節點壓入棧內
- 將指標移到當前節點的下一個節點
獲得棧的大小
size
,建立一個陣列print
,其大小為size
建立下標並初始化
index = 0
重複
size
次下列操作:- 從棧內彈出一個節點,將該節點的值存到
print[index]
- 將
index
的值加 1
- 從棧內彈出一個節點,將該節點的值存到
返回
print
程式碼
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public int[] reversePrint(ListNode head) {
Stack<ListNode> stack = new Stack<ListNode>();
ListNode temp = head;
while (temp != null) {
stack.push(temp);
temp = temp.next;
}
int size = stack.size();
int[] print = new int[size];
for (int i = 0; i < size; i++) {
print[i] = stack.pop().val;
}
return print;
}
}
複雜度分析
- 時間複雜度 O(N): 正向遍歷一遍連結串列,然後從棧彈出全部節點,等於又反向遍歷一遍連結串列。
- 空間複雜度 O(N): 額外使用一個棧儲存連結串列中每個節點。
來源:力扣(LeetCode)
連結:leetcode-cn.com/problems/cong-wei-...
本作品採用《CC 協議》,轉載必須註明作者和本文連結