面试题06. 从尾到头打印链表
2020-02-14 本文已影响0人
阿星啊阿星
从尾到头打印链表
题目描述
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例:
输入: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