剑指offer—从头到尾打印列表
题目描述:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
解题思路:
这道题不难,可以使用栈来实现,将原数组的值依次存入一个新的栈中。然后再弹出。代码如下:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
result = []
if listNode == None:
return []
while listNode != None:
result.append(listNode.val)
listNode = listNode.next
final= [result.pop() for i in range(len(result))]
return final
还可以使用一个递归来实现,递归的本质上就是一个栈结构。当我们访问一个节点时,先递归输出它后面的节点,最后再输出该节点。就完成了一个输出的反转。
使用python最后输出结果时,利用了它的切片,将当前值放到最后,前面链接其下一个节点的递归,这样依次进行一句代码就可以得到最后的结果。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
if listNode == None:
return []
return self.printListFromTailToHead(listNode.next)+[listNode.val]