【算法训练】剑指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] # 逆序