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

有序链表求无重复交集:如何修改代码实现不创建新节点

链表交集无新建节点实现方案

约束要求

  • 不允许创建新的Node节点
  • 结果链表必须由原链表的节点拼接组成
  • 返回结果为两个有序链表的无重复交集

核心修改逻辑

  • 废弃原代码中Node(a.data, ...)的新建节点逻辑,直接复用原链表中值匹配的节点
  • 匹配到相等值后,一次性跳过两个链表中所有等于该值的节点,避免结果出现重复项
  • 直接修改节点的next指针完成结果链表的拼接,无需额外申请空间

修改后的LLIntersection函数代码

def LLIntersection(a, b):
    head = tail = None

    while a and b:
        if a.data == b.data:
            # 记录当前匹配的值,用于后续去重
            curr_val = a.data
            # 直接复用a的当前节点,也可选择b的节点,二者值一致
            curr_node = a
            # 跳过a中所有等于curr_val的重复节点
            while a and a.data == curr_val:
                a = a.next
            # 跳过b中所有等于curr_val的重复节点
            while b and b.data == curr_val:
                b = b.next
            # 切断原链表的后续关联,避免带入冗余节点
            curr_node.next = None
            # 拼接至结果链表
            if head is None:
                head = curr_node
                tail = head
            else:
                tail.next = curr_node
                tail = curr_node
        elif a.data < b.data:
            a = a.next
        else:
            b = b.next
    return head

逻辑说明

  1. 复用节点逻辑:匹配到相等值时直接取原链表的现有节点,完全没有新建Node实例,满足约束要求
  2. 去重逻辑:匹配到值后一次性跳过两个链表中所有该值的节点,保证每个值只会被加入结果一次,符合输出要求
  3. 指针处理:拼接节点前先把curr_node.next设为None,切断该节点和原链表的后续关联,避免把原链表中后面的重复节点意外带入结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:04