[每日一題] 第九題:從尾到頭列印連結串列

DRose發表於2020-07-31

輸入一個連結串列的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。

示例 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 協議》,轉載必須註明作者和本文連結

相關文章