You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LinkedList之字形转换函数陷入死循环,请求问题排查

LinkedList之字形转换函数无限循环问题修复

问题分析

你的代码存在两个核心问题导致无限循环及潜在报错:

  1. 循环链表形成:处理最后一组节点(如示例中的4→5→6)时,仅当after_node.next存在时才设置next_node.next,导致5.next仍指向6,而6.next已被改为5,形成5↔6的循环,触发Print方法无限遍历。
  2. 返回值不一致:边界条件返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:30:35