從尾到頭打印鏈表
題目描述
輸入一個鏈表的頭節點,從尾到頭反過來返回每個節點的值(用數組返回)。
示例:
輸入:head = [1,3,2]
輸出:[2,3,1]
提示:
0 <= 鏈表長度 <= 10000
題目分析
題目要求逆序輸出鏈表喲,因為剛刷了拿到翻轉鏈表的題,所以一想就想到先把鏈表翻轉,然后在把他們放進隊列里面,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