面試題06. 從尾到頭打印鏈表

從尾到頭打印鏈表

題目描述

輸入一個鏈表的頭節點,從尾到頭反過來返回每個節點的值(用數組返回)。


示例:

輸入:head = [1,3,2]
輸出:[2,3,1]


提示:
0 <= 鏈表長度 <= 10000

轉載來源:力扣(LeetCode)


題目分析

題目要求逆序輸出鏈表喲,因為剛刷了拿到翻轉鏈表的題,所以一想就想到先把鏈表翻轉,然后在把他們放進隊列里面,FIFO(First In First Out),搞定,然后仔細一想,我TM這不脫褲子放屁多此一舉嗎,和FIFO對應的是棧的LIFO(Last In First Out),遍歷鏈表,逐個壓棧,然后因為這里要求返回的是int數組,而不是打印出來,所以調用了一下Stack.reverse.toIntArray()將棧翻轉再轉成數組,如果是直接打印的話只需要將棧里的元素逐個pop打印就可以,比翻轉鏈表代碼簡潔多了...

import java.util.*
class Solution {
    fun reversePrint(head: ListNode?): IntArray {
        val stack = Stack<Int>()
        var now = head
        while(now != null){
            stack.push(now.`val`)
            now = now.next
        }
        stack.reverse()
        return stack.toIntArray()
    }
}

做完題目肯定是要看一下題解的,看到題解里面出現了遞歸兩字,頓時想到了另外一種做法(做題少的后果就是不給提示不會做),偽代碼如下(代碼也差不多,意思意思就不寫了):

fun(head)
    head 為空
        結束
    fun(head.next)
    輸出head.val

代碼文件


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容