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

面向对象实现合并两个有序列表:调用方法与优势解析

如何调用基于类的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:36:21