Python用dummy head技术合并有序链表触发初始化参数错误如何解决
问题解决方法
错误原因
你自定义的LinkedList类的__init__构造方法要求必须传入位置参数data,但你创建dummy头节点实例时没有传入任何参数,因此触发参数缺失报错。
修复方案
dummy节点本身仅作为临时占位的表头使用,它的data属性不会被合并逻辑用到,最终返回的结果是dummy.next,因此你可以传入任意合法值作为dummy的data参数,比如None、0都可以。
需要修改两处代码:
- 调整
merge_lists函数中dummy节点的创建逻辑:
将原来的
dummy = LinkedList()
修改为
dummy = LinkedList(None)
- 调整结果输出逻辑,调用你定义的
print_list函数打印链表,否则直接打印会输出链表对象的内存地址:
将原来的
print(merge_lists(node1, node2))
修改为
print_list(merge_lists(node1, node2))
完整可运行代码
class LinkedList: def __init__(self, data): self.data = data self.next = None def print_list(head: LinkedList) -> None: while head: print(head.data, end=" -> ") head = head.next print("None") def merge_lists(headA, headB): dummy = LinkedList(None) curr = dummy while headA != None and headB != None: if headA.data < headB.data: curr.next = headA headA = headA.next else: curr.next = headB headB = headB.next curr = curr.next if headA != None: curr.next = headA else: curr.next = headB return dummy.next node1 = LinkedList(1) node1.next = LinkedList(2) node1.next.next = LinkedList(7) node2 = LinkedList(1) node2.next = LinkedList(3) print_list(merge_lists(node1, node2))
运行后输出结果和你预期一致:
1 -> 1 -> 2 -> 3 -> 7 -> None
内容的提问来源于stack exchange,提问作者Mo Fatah
相关产品推荐
相关产品推荐

