從尾到頭打印鏈表
題目描述
輸入一個(gè)鏈表的頭節(jié)點(diǎn)姓迅,從尾到頭反過來(lái)返回每個(gè)節(jié)點(diǎn)的值(用數(shù)組返回)府寒。
示例:
輸入:head = [1,3,2]
輸出:[2,3,1]
提示:
0 <= 鏈表長(zhǎng)度 <= 10000
題目分析
題目要求逆序輸出鏈表喲刮便,因?yàn)閯偹⒘四玫椒D(zhuǎn)鏈表的題前酿,所以一想就想到先把鏈表翻轉(zhuǎn)凶伙,然后在把他們放進(jìn)隊(duì)列里面碌尔,F(xiàn)IFO(First In First Out)傻咖,搞定朋魔,然后仔細(xì)一想,我TM這不脫褲子放屁多此一舉嗎卿操,和FIFO對(duì)應(yīng)的是棧的LIFO(Last In First Out)警检,遍歷鏈表,逐個(gè)壓棧害淤,然后因?yàn)檫@里要求返回的是int數(shù)組扇雕,而不是打印出來(lái),所以調(diào)用了一下Stack.reverse.toIntArray()將棧翻轉(zhuǎn)再轉(zhuǎn)成數(shù)組窥摄,如果是直接打印的話只需要將棧里的元素逐個(gè)pop打印就可以镶奉,比翻轉(zhuǎn)鏈表代碼簡(jiǎn)潔多了...
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()
}
}
做完題目肯定是要看一下題解的,看到題解里面出現(xiàn)了遞歸兩字崭放,頓時(shí)想到了另外一種做法(做題少的后果就是不給提示不會(huì)做)哨苛,偽代碼如下(代碼也差不多,意思意思就不寫了):
fun(head)
head 為空
結(jié)束
fun(head.next)
輸出head.val