问题描述
我在python中创建了一个链表,并希望构建一个函数来查找最后一个项目,但是当我按照以下方式进行设计时,该函数返回“ None”类型。 “返回自我”一定有问题,因为我在返回之前打印“自我”看起来还不错。
class LinkNode():
def __init__(self,value=0,next=None):
self.val=value
self.next=next
def findlast(self):
if self.next == None:
return self
else:
self.next.findlast()
以下是创建实例
node3=LinkNode(3,None)
node2=LinkNode(2,node3)
chain=LinkNode(1,node2)
x=chain.findlast()
type(x)
NoneType
解决方法
def findlast(self):
if self.next == None:
return self
else:
self.next.findlast()
最后一行是一个问题,因为它不会从函数中返回任何内容,这就是为什么得到None
的原因。您应该使用(也不要使用多余的else
,并且将is
与None
一起使用):
def findlast(self):
if self.next is None:
return self
return self.next.findlast()
但是,请记住,这不是理想递归用例,它最好写为:
def findlast(obj):
if obj is not None: # only needed if you may pass in None as self.
while obj.next is not None:
obj = obj.next
return obj