输入一个链表,从尾到头打印链表每个节点的值。
#利用list的reverse(),也可以用切片[::-1]
# 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 []
result = []
while listNode:
result.append(listNode.val)
listNode = listNode.next
result.reverse()
return result
解法二:
#利用栈
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Node():
def __init__(self,value=None,next=None):
self.next = next
self.value = value
class stack():
def __init__(self):
self.top = None
def push(self,value):
if self.top is None:
self.top = Node(value)
else:
self.top = Node(value,self.top)
def pop(self):
if self.top:
value = self.top.value
self.top = self.top.next
return value
def peek(self):
if self.top:
return self.top.value
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
if listNode is None:
return []
s = stack()
while listNode:
s.push(listNode.val)
listNode = listNode.next
result = []
while s.peek() != None:
result.append(s.pop())
return result
解法三:递归
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def __init__(self):
self.result = []
def printListFromTailToHead(self, listNode):
# write code here
if listNode!= None:
if listNode.next != None:
self.printListFromTailToHead(listNode.next)
self.result.append(listNode.val)
return self.result