面试题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()
        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

代码文件


你可能感兴趣的:(面试题06. 从尾到头打印链表)