有序链表求无重复交集:如何修改代码实现不创建新节点
链表交集无新建节点实现方案
约束要求
- 不允许创建新的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
逻辑说明
- 复用节点逻辑:匹配到相等值时直接取原链表的现有节点,完全没有新建Node实例,满足约束要求
- 去重逻辑:匹配到值后一次性跳过两个链表中所有该值的节点,保证每个值只会被加入结果一次,符合输出要求
- 指针处理:拼接节点前先把
curr_node.next设为None,切断该节点和原链表的后续关联,避免把原链表中后面的重复节点意外带入结果
内容的提问来源于stack exchange,提问作者Marian
相关产品推荐
相关产品推荐

