面向对象实现合并两个有序列表:调用方法与优势解析
如何调用基于类的mergeTwoLists1方法及面向对象实现的优势
一、调用步骤与示例
mergeTwoLists1方法接收的是ListNode类型的链表节点,而非普通Python列表,因此需要先完成列表与链表的转换,再执行调用,最后将结果转回列表查看。
1. 实现列表与链表的转换辅助函数
# 将普通列表转为ListNode链表 def list_to_linkedlist(lst): dummy = ListNode() current = dummy for val in lst: current.next = ListNode(val) current = current.next return dummy.next # 将ListNode链表转回普通列表 def linkedlist_to_list(node): result = [] while node: result.append(node.val) node = node.next return result
2. 完整调用流程
# 保留原定义的ListNode和Solution类(修正方法名笔误) class ListNode: def __init__(self, val=0, next=None): # 原默认val=1不合理,改为0更符合常规 self.val = val self.next = next class Solution: def mergeTwoLists1(self, l1, l2): if l1 is None: return l2 elif l2 is None: return l1 elif l1.val < l2.val: l1.next = self.mergeTwoLists1(l1.next, l2) # 原代码误写为mergeTwoLists,修正为mergeTwoLists1 return l1 else: l2.next = self.mergeTwoLists1(l1, l2.next) return l2 # 调用示例 if __name__ == "__main__": # 注意:合并有序列表的前提是输入列表本身有序,原测试用例[3,5,4]无序,改为有序列表[3,4,5] list1 = [3,4,5] list2 = [1,3] # 转换为链表 l1 = list_to_linkedlist(list1) l2 = list_to_linkedlist(list2) # 实例化Solution并调用方法 sol = Solution() merged_linkedlist = sol.mergeTwoLists1(l1, l2) # 转回列表查看结果 print(linkedlist_to_list(merged_linkedlist)) # 输出: [1, 3, 3, 4, 5]
二、面向对象实现的优势
- 内存效率更高:原列表递归实现每次切片、拼接都会生成新列表,空间复杂度为O(n+m);链表实现仅修改节点的
next指针,无额外对象创建开销,空间复杂度仅为递归栈的O(log(n+m))(若改为迭代版本可降至O(1))。 - 贴合链表结构本质:链表本身依赖节点对象的引用关系构建,用类实现节点与操作方法,逻辑更贴合数据结构的设计,代码可读性更强。
- 模块化与可扩展性好:Solution类可集中管理所有链表操作(如反转、去重等),后续扩展功能只需在类中添加新方法,代码结构更清晰。
- 无冗余数据拷贝:列表切片、拼接会产生数据拷贝,链表操作仅修改指针指向,处理大规模数据时性能优势更显著。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

