【算法训练】剑指offer#06 从尾到头打印链表

一、描述

从尾到头打印链表

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

示例 1:

输入:head = [1,3,2]
输出:[2,3,1]

二、思路

  • 初期的思路就是,将传入的链表中的值依次存入数组中,之后逆序返回数组即可
def reversePrint(self, head: ListNode) -> List[int]:
    returnArr = [] # 返回数组

    while head.next: # 当存在next节点时,继续循环
        returnArr.append(head.val)
        head = head.next

    return returnArr[::-1] # 逆序

这样写的话尾节点的值将被舍弃

  • 应该在输出前加上尾节点的值或者改进while的判断
def reversePrint(self, head: ListNode) -> List[int]:
    returnArr = [] # 返回数组

    while head.next: # 当存在next节点时,继续循环
        returnArr.append(head.val)
        head = head.next

    if head.val:
        returnArr.append(head.val)

    return returnArr[::-1] # 逆序

while中的head.next默认了传入链表不为空,导致为空时报错

  • 应该增加链表是否为空的判断
def reversePrint(self, head: ListNode) -> List[int]:
        returnArr = [] # 返回数组
        # 如果head为空则直接返回空数组
        if head is None:
            return returnArr
        else:
            while head.next: # 当存在next节点时,继续循环
                returnArr.append(head.val)
                head = head.next

            if head.val:
                returnArr.append(head.val)

            return returnArr[::-1] # 逆序

还是不行,因为if(0)为false,当尾节点的值为0时,会跳过

三、解题

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        returnArr = [] # 返回数组
        # 如果head为空则直接返回空数组
        if head is None:
            return returnArr
        else:
            while head.next: # 当存在next节点时,继续循环
                returnArr.append(head.val)
                head = head.next

            returnArr.append(head.val)

            return returnArr[::-1] # 逆序
posted @ 2022-01-18 17:51  小拳头呀  阅读(35)  评论(0编辑  收藏  举报