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

合并两个有序链表时提示merge_linkedlists函数未定义,求解决方案

解决merge_linkedlists函数未定义及相关问题的方案

核心问题:函数未定义报错

你的merge_linkedlists函数定义里带了self参数,这意味着它是类的成员方法,但你在main里直接当作普通全局函数调用,Python找不到这个全局函数,所以触发未定义错误。

解决方式二选一:

  • 去掉函数定义里的self参数,将其改为普通全局函数
  • 如果它是Linked_List类的方法,调用时要通过类实例(比如link_li.merge_linkedlists(link_l2)),同时调整函数参数(只需传入另一个链表)

附带逻辑错误修正

除了未定义问题,代码还有几个bug需要修复才能正常运行:

  1. 参数大小写不匹配:函数定义参数是Link_li、Link_l2,内部却用link_li、link_l2,Python大小写敏感,会导致变量未定义
  2. 比较条件错误:if link_li.num >= link_li.num是自身和自身比较,应改为link_li.num >= link_l2.num
  3. tail指针未正确移动:tail = tail.next需放在循环内部,每次添加节点后移动,否则tail永远停留在初始位置
  4. 剩余节点未处理:当前循环break后仅打印disp,未将剩余链表节点接到合并后的链表末尾
  5. 链表实例访问错误:你传入的是Linked_List类实例,而非链表头节点,需先获取头节点(比如假设Linked_List有head属性,用link_li.head操作)

修正后的完整代码示例

假设将其改为普通全局函数,同时修复所有bug:

class Node:
    def __init__(self, num):
        self.num = num
        self.next = None

class Linked_List:
    def __init__(self):
        self.head = None
    
    def add_to_f(self, node):
        node.next = self.head
        self.head = node
    
    def disp(self):
        current = self.head
        while current:
            print(current.num, end=" ")
            current = current.next
        print()

def merge_linkedlists(link_li, link_l2):
    # 获取两个链表的头节点
    l1 = link_li.head
    l2 = link_l2.head
    dummy = Node(0)
    tail = dummy
    
    while l1 is not None and l2 is not None:
        if l1.num <= l2.num:
            tail.next = l1
            l1 = l1.next
        else:
            tail.next = l2
            l2 = l2.next
        # 每次添加节点后移动tail指针
        tail = tail.next
    
    # 拼接剩余未遍历的节点
    if l1 is not None:
        tail.next = l1
    if l2 is not None:
        tail.next = l2
    
    # 将合并后的头节点赋值给其中一个链表
    link_li.head = dummy.next

if __name__ == '__main__':
    link_li=Linked_List()
    link_li.add_to_f(Node(3))
    link_li.add_to_f(Node(2))
    link_li.disp()
    print("")
    link_l2=Linked_List()
    link_l2.add_to_f(Node(5))
    link_l2.add_to_f(Node(4))
    link_l2.disp()
    print("")
    merge_linkedlists(link_li,link_l2)
    link_li.disp()
    print("")
    link_l3=Linked_List()

内容的提问来源于stack exchange,提问作者name__

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:15:39