Python链表索引函数返回值始终为None问题求助
解决递归函数返回None的问题
嗨,我一眼就看穿这个问题啦——这是递归写法里超容易踩的小坑!你的index函数在递归调用的时候没有返回递归的结果,导致除了最底层的递归调用返回了正确值,上层所有函数调用都没传递返回内容,最终默认返回None。
问题根源分析
先看你写的index函数代码:
def index(head, idx=0): if idx == 0: return head.val print(idx) index(head.next, idx-1) # 这里漏掉了return!
当idx不等于0时,你调用了index(head.next, idx-1),但没把这个调用的结果返回给上一层。举个例子:当idx=4时,函数打印4后调用index(head.next, 3);这个调用打印3后再调用index(head.next,2)……直到idx=0时返回head.val,但这个值没有被传递回每一层递归调用,所以最开始的index(link,4)最终拿到的就是None。
修复方案
只需要在递归调用前加上return,把递归结果逐层传递回去就行:
def index(head, idx=0): if idx == 0: return head.val print(idx) return index(head.next, idx-1) # 补上return!
验证修复结果
修改后运行你的代码,输出会变成:
4 3 2 1 5
这就完全正确了——因为create_list创建的链表结构是:link(val=0) -> 1 -> 2 -> 3 -> 4 ->5,index(link,4)对应取第5个节点(从0开始计数,idx=4就是最后一个节点的val=5)。
另外顺嘴提一句,你的create_list函数其实也有同样的“无返回”问题,但因为是通过修改linkedlist.next来构建链表的,所以功能暂时不受影响;如果后续需要用这个函数的返回值,记得也要补上return哦~
内容的提问来源于stack exchange,提问作者user13406539
相关产品推荐
相关产品推荐

