输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
ListNdoe 这个类存储的是链表中的一个节点,它的val属性保存的是本节点的值,next属性保存的它连接的下一个节点(下一个节点同样是一个同样格式的类)。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
result = []
while listNode!=None:
result.insert(0,listNode.val)
listNode = listNode.next
return result
思路:
从列表里一个一个地拿出每一个数值,存储到列表里,作为输出。
拿出数值:利用 listNode 作为指针,listNode不仅代表列表的节点。通过 listNode = listNode.next 使指针能够移动,指向每一个节点。终止条件就是指针为空,说明遍历完链表。
存储数值: result.insert(0,listNode.val) 取出的数值,从头部插入。
另外看到一个大神的递归版本:
链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
def printListFromTailToHead(self, listNode):
# write code here
if
listNode is None:
return
[]
return
self.printListFromTailToHead(listNode.next) + [listNode.val]
递归调用printListFromTailToHead,在传入参数的时候,相当于listNode = listNode.next,同样是移动指针,
+ [listNode.val]取出数值,并保存,并且使得先得出的数值存储在后面。