一、要求
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
二、思路及代码
在本题中,对输入进行了多个节点构成链表、单个孤立节点、单个空节点进行了详细的测试
方法一:使用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的区别