剑指offer(3):从尾打印链表
- 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
一、链表的结构
在正式做题之前。我们先来看一下在python中链表是如何实现的:
# 这个就是链表的结构,首先这个是固定的,在工作的时候人家就给你了下面这样一个结构,你不能随意改动
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
然后对他进行初始化,初始化后一个节点连接着另一个节点:
if __name__ == "__main__":
l1 = ListNode(1)
l2 = ListNode(2)
l3 = ListNode(3)
# 把他们连起来:l1-->l2-->l3-->none
l1.next = l2
l2.next = l3
l3.next = None
这样就连接了一个链表,你如果想正着顺序打印出来,那么可以定义一个打印函数:
def printNode(node): # node 是初始化后的值
# 如果有值得话就进行打印
print(node.val)
node = node.next # 连起来
printNode(l1)
二、从尾到头打印一个链表
首先需要明确的是,你是在已经给定链表环境的基础之上做这道题的:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
可以使用栈结构,从头到尾遍历链表放入栈中,根据栈先入后出的性质,可以实现将链表从尾到头返回。在python中可以用列表结构来实现栈的功能。
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
ret = []
while listNode:
ret.append(listNode.val) # 取得链表的值
listNode = listNode.next # 指向另一个节点
return ret[::-1]