一、要求
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
二、思路及代码
在本题中,对输入进行了多个节点构成链表、单个孤立节点、单个空节点进行了详细的测试
方法一:使用insert函数:insert(a,b)可在列表的a位置插入b
方法二:使用pop函数从尾到头输出列表
方法三:使用递归,遇到空节点返回进行输出
#建立链表类 class ListNode(): def __init__(self,val=None): self.value=val self.next=None #方法一:列表insert插值 def PrintListNodeFromBottleTOTOP1(node): recordvalue=[] node2=node while node2: recordvalue.insert(0,node2.value) node2=node2.next print(recordvalue) #方法二:列表pop输出 def PrintListNodeFromBottleTOTOP2(node): recordvalue=[] node2=node while node2: recordvalue.append(node2.value) node2=node2.next while recordvalue: recordvalue.pop() #方法三:递归调用 def PrintListNodeFromBottleTOTOP3(node): if node.next: PrintListNodeFromBottleTOTOP3(node.next) print(node.value) def main(): Node1=ListNode(2) Node2 = ListNode(4) Node3 = ListNode(6) Node4 = ListNode(10) Node5 = ListNode() Node1.next=Node2 Node2.next=Node3 print("the first approach") PrintListNodeFromBottleTOTOP1(Node1) PrintListNodeFromBottleTOTOP1(Node4) PrintListNodeFromBottleTOTOP1(Node5) print("the second approach") PrintListNodeFromBottleTOTOP1(Node1) PrintListNodeFromBottleTOTOP1(Node4) PrintListNodeFromBottleTOTOP1(Node5) print("the third approach") PrintListNodeFromBottleTOTOP1(Node1) PrintListNodeFromBottleTOTOP1(Node4) PrintListNodeFromBottleTOTOP1(Node5) if __name__=='__main__': main()
三、思考与总结
1.在构造链表时,本测试程序使用了在__init__中将下个节点(即.next属性)设置为空,main中设置next节点的方法
2.区分if b 和while b的区别