剑指 Offer 06. 从尾到头打印链表

91 阅读1分钟

题目描述

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000

解题思路1: 遍历法

正序遍历链表到数组, 将数组反序输入

示例代码1:

def reversePrint(head: helper.ListNode):
    result = []
    while head is not None:
        result.append(head.val)
        head = head.next
    return result[::-1]

解题思路2: 辅助栈法

遍历链表, 放进一个栈里, 根据栈FILO的特点, 输出栈就是倒序的链表

示例代码2:

def reversePrint(head: helper.ListNode):
    stack = []
    while head is not None:
        stack.append(head.val)
        head = head.next

    res = []
    while len(stack) > 0:
        res.append(stack.pop())
    return res

解题思路3: 递归回溯法

递归遍历链表, 回溯时返回上次递归的数组与当前item

示例代码3:

def reversePrint(head: helper.ListNode):
    if head is None:
        return []
    else:
        return reversePrint(head.next) + [head.val]