问题
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
知识储备
关于链表的介绍可以参考link。
关于链表的操作可以参考link。
问题分析
了解了链表的基本操作之后,如何实现倒序输出呢,当我们在遍历链表的时候,用列表来存储每次访问的节点数据值,最后用insert-append-reverse均可以实现。
代码
先遍历链表保存到列表中,最后用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
l = []
h = listNode # 链表结构的指针
while h: # 开始遍历链表
l.append(h.val) # 在l列表增加h指针的数据值
h = h.next # 指针移动到下一位 经过循环得到所有值
l.reverse() # 但是正序的,需要的是倒序输出 所以reverse
return l
或者:
# -*- 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 = []
if listNode is None:
return result
while listNode.next is not None:
result.append(listNode.val)
listNode = listNode.next
result.append(listNode.val)
return result[::-1] # 倒序输出
遍历的时候,指定0位置插入该指针对应的值,这样就可以直接完成倒序的列表,不需要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
l = []
head = listNode # head就是游标
while head:
l.insert(0, head.val)# 每次的值都插在0位置,即实现了倒序
head = head.next # 实现游标移动
return l
递归方法
不断递归找到最后一个指针然后列表增加倒回去的指针对应的数据。
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
list = []
if listNode:
list = self.printListFromTailToHead(listNode.next)
list.append(listNode.val)
return list
更多详情可参考link。
关于链表
实现一个简单的链表,详情参考link。
class LinkedListNode(object):
def __init__(self,next=None,value=None):
self.next = next
self.value = value
pHead = LinkedListNode() # 空头节点 指针域没有指向
myList = [1,2,3,4,5,6,7,8,9] # 列表用来添加节点
for i in range(len(myList)):
pHead = LinkedListNode(pHead,myList[i]) # 将列表的值指向空头节点 并返回这个新节点的指针域 如此循环 9->8->7->6->5->4->3->2->1->空头节点
实现倒序输出
def printLinkedList(pHead): #pHead 为创建好的链表结构 9->8->7->6->5->4->3->2->1
if pHead.value==None:
return False
printLinkedList(pHead.next) # 递归找到最后一个指针,依次返回指针对应的值,实现倒序输出
print(pHead.value)
为了应对链表、栈、二叉树,还需要学习数据结构!