《剑指offer》Python语言 面试题5:从尾到头打印链表

本文介绍了一种使用递归和栈两种方法实现的链表逆序打印算法。通过递归调用和利用栈的特性,可以高效地实现从链表尾部到头部的节点值打印。文中提供了详细的代码示例及测试案例。

    写在开头的话:

    当想写这个的时候,发现已经有人做了这个工作了,详情请见Python基础算法/剑指offer,然而依然决定自己写下这个系列,作为算法部分的巩固和提高。在自己写完后会借鉴Python基础算法/剑指offer的代码,如有部分重复,还请见谅。


    这个还是很简单的,单纯贴代码吧。

# -*- coding: UTF-8 -*-.
'''
输入一个链表,从尾到头打印链表每个节点的值。
'''
class Node(object):
    """节点类"""
    def __init__(self, data = -1, next = next):
        self.data = data
        self.next = next

def solveRecursive(nodeHead):
	'Function to solve problem.'
	if not isinstance(nodeHead, Node):
		return
	solveRecursive(nodeHead.next)
	print nodeHead.data,

def solveStack(nodeHead):
	'Function to solve problem.'
	if not isinstance(nodeHead, Node):
		return
	dataStack = []
	while(isinstance(nodeHead, Node)):
		dataStack.append(nodeHead.data)
		nodeHead = nodeHead.next
	while(dataStack):
		print dataStack.pop(),

def test():
	'Test the program.'
	# Recursive
	# test1
	print "test1"
	node5 = Node(5)
	node4 = Node(4, node5)
	node3 = Node(3, node4)
	node2 = Node(2, node3)
	node1 = Node(1, node2)
	solveRecursive(node1)# 5 4 3 2 1
	# test2
	print "\ntest2"
	node1 = Node(1)
	solveRecursive(node1)# 1
	# test3
	print "\ntest3"
	solveRecursive(None)#

	# Loop
	# test1
	print "\ntest1"
	node5 = Node(5)
	node4 = Node(4, node5)
	node3 = Node(3, node4)
	node2 = Node(2, node3)
	node1 = Node(1, node2)
	solveStack(node1)# 5 4 3 2 1
	# test2
	print "\ntest2"
	node1 = Node(1)
	solveStack(node1)# 1
	# test3
	print "\ntest3"
	solveStack(None)#

if __name__ == "__main__":
	#input()
	test()
    list的append和pop都是O(1)的时间效率,因此两个子程序的时间复杂度都是O(n)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值