LinkedList之字形转换函数陷入死循环,请求问题排查
LinkedList之字形转换函数无限循环问题修复
问题分析
你的代码存在两个核心问题导致无限循环及潜在报错:
- 循环链表形成:处理最后一组节点(如示例中的4→5→6)时,仅当
after_node.next存在时才设置next_node.next,导致5.next仍指向6,而6.next已被改为5,形成5↔6的循环,触发Print方法无限遍历。 - 返回值不一致:边界条件返回
head节点对象,其他情况返回链表实例,调用Print时会因对象类型不匹配报错。
修复后的代码
# LinkedList() class is already defined in driver code # zigzag takes a linkedlist instance and linkedlist.head def zigzag(ll, head): if head is None or head.next is None: return ll curr = head while curr and curr.next and curr.next.next: next_node = curr.next after_node = curr.next.next temp = after_node.next # 直接获取后续节点,不存在则为None # 重新连接指针完成之字形转换 curr.next = after_node after_node.next = next_node next_node.next = temp # 移动到下一组起始节点 curr = temp return ll # << TEST >> if __name__ == "__main__": ll = LinkedList() ll.insert_values([1, 2, 3, 4, 5, 6]) ll.Print() lln = zigzag(ll, ll.head) lln.Print()
修复说明
- 移除
if temp:判断,强制设置next_node.next = temp,即使temp为None,也能断开循环,避免链表闭环。 - 统一返回链表实例
ll,确保调用方始终能正确调用Print方法。 - 简化变量赋值逻辑,让指针调整流程更清晰。
内容的提问来源于stack exchange,提问作者Bishal Hazarika
相关产品推荐
相关产品推荐

