合并两个有序链表时提示merge_linkedlists函数未定义,求解决方案
解决merge_linkedlists函数未定义及相关问题的方案
核心问题:函数未定义报错
你的merge_linkedlists函数定义里带了self参数,这意味着它是类的成员方法,但你在main里直接当作普通全局函数调用,Python找不到这个全局函数,所以触发未定义错误。
解决方式二选一:
- 去掉函数定义里的
self参数,将其改为普通全局函数 - 如果它是
Linked_List类的方法,调用时要通过类实例(比如link_li.merge_linkedlists(link_l2)),同时调整函数参数(只需传入另一个链表)
附带逻辑错误修正
除了未定义问题,代码还有几个bug需要修复才能正常运行:
- 参数大小写不匹配:函数定义参数是
Link_li、Link_l2,内部却用link_li、link_l2,Python大小写敏感,会导致变量未定义 - 比较条件错误:
if link_li.num >= link_li.num是自身和自身比较,应改为link_li.num >= link_l2.num - tail指针未正确移动:
tail = tail.next需放在循环内部,每次添加节点后移动,否则tail永远停留在初始位置 - 剩余节点未处理:当前循环break后仅打印
disp,未将剩余链表节点接到合并后的链表末尾 - 链表实例访问错误:你传入的是
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__
相关产品推荐
相关产品推荐

