LeetCode递归反转链表:为何递归未在基准情形终止?
反转链表递归实现的终止问题分析
你的递归逻辑本身是正确的,基准情形(currpointer.next为None时)会正常终止递归并返回新头节点。你看到的“持续运行”其实是两次独立的递归调用,而非同一次递归未终止,原因如下:
从输出内容可拆分出两次完整的递归流程:
- 第一次处理链表
1->2->3->4->5:递归逐层深入到节点5,触发基准情形返回,对应输出前8行; - 第二次处理链表
1->2:递归深入到节点2,触发基准情形返回,对应输出最后4行。
- 第一次处理链表
出现两次调用的常见场景:
- 本地测试时手动调用了两次
reverseList方法; - LeetCode测试用例包含多组输入(比如同时测试
[1,2,3,4,5]和[1,2]两组数据),导致代码被执行两次。
- 本地测试时手动调用了两次
验证递归逻辑是否正确,可单独测试一组输入:比如只传入1->2->3->4->5,此时输出仅会有前8行,递归会在节点5处正常终止并返回正确的反转链表头节点5。
另外,你的代码存在一个边界问题:如果输入链表为空(head为None),调用reverse(head, None)会直接访问currpointer.next导致报错,可在reverseList方法中先做空值判断:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: if not head: return None return self.reverse(head, None)
内容的提问来源于stack exchange,提问作者user15846642
相关产品推荐
相关产品推荐

