题目:输入一个链表,从尾到头打印链表每个节点的值。若列表为空,输出[ ]。
思考:面试中链表相关的题目有很多,这个属于相对简单一点的,首先需要定义一下链表节点的类,然后来构建链表。我们知道从头到尾打印链表的值是很简单的,直接按照顺序打印就可以了。但是对于单向链表,如果想要反向打印的话也不能把指针往回走,所以就按顺序把链表的元素依次保存到一个列表中,在最后反向输出列表的元素就可以了。
Python代码如下
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
ls = []
if listNode is None:
return ls
while listNode.next:
ls.append(listNode.val)
listNode = listNode.next
ls.append(listNode.val)
return ls[::-1]
s = Solution()
l1 = ListNode('a')
l2 = ListNode('b')
l3 = ListNode('c')
l1.next = l2
l2.next = l3
print s.printListFromTailToHead(l1)
# ['c', 'b', 'a']
PS : 需要注意的是,在对列表进行遍历时要避免出现越界的情况,所以可以通过判断listNode.next是否存在来作为终止条件
PS2 : ls[::-1]可以实现列表反转