题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路
逆序链表,首先想到的必须是栈啊,利用栈的后进先出特性。同时,栈的变形:递归,同样是可以的。 其次,利用python列表的方法也可以简单实现
栈
将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):
# write code here
if listNode is None:
return []
else:
TempList = []
LastList = []
while listNode is not None:
TempList.append(listNode.val) #入栈
listNode = listNode.next
while len(TempList) is not 0:
LastList += [TempList.pop()] #出栈
return LastList
递归
(参考了牛客网评论区的代码,简洁的不行)
# -*- 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
if listNode is None:
return []
else:
return self.printListFromTailToHead(listNode.next) + [listNode.val]
python黑科技
依次遍历,构建正序列表,再使用python列表的方法lst.reverse(),简单粗暴
# -*- 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
if listNode is None:
return []
else:
ArrayList = []
while listNode is not None:
ArrayList.append(listNode.val)
listNode = listNode.next
ArrayList.reverse() #reverse()方法改变了列表,但是不返回值
return ArrayList