两个有序链表序列的交集

两个有序链表序列的交集

一、问题描述

给定两个有序链表,要求找出这两个链表的交集元素,并以有序链表的形式返回。

二、思路
  1. 双指针法:使用两个指针分别指向两个链表的当前节点。
  2. 比较元素
    • 如果两个指针指向的元素相等,则将该元素加入结果链表,并移动两个指针。
    • 如果指针A指向的元素小于指针B指向的元素,则移动指针A,反之亦然。
  3. 结束条件:当任一链表的指针到达末尾时停止。
三、算法步骤
  1. 初始化两个指针 pApB 分别指向链表A和链表B的头节点。
  2. 初始化一个空的结果链表 result
  3. 遍历两个链表,比较 pApB 指向的节点:
    • 如果 pA.val == pB.val,将该值添加到 result,然后同时移动 pApB
    • 如果 pA.val < pB.val,移动 pA
    • 如果 pA.val > pB.val,移动 pB
  4. 返回结果链表。
四、示例代码(Python)
python 复制代码
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def getIntersection(headA, headB):
    dummy = ListNode(0)  # 哨兵节点
    tail = dummy  # 结果链表的尾节点
    pA, pB = headA, headB
    
    while pA and pB:
        if pA.val == pB.val:
            tail.next = ListNode(pA.val)  # 添加交集元素
            tail = tail.next
            pA = pA.next
            pB = pB.next
        elif pA.val < pB.val:
            pA = pA.next
        else:
            pB = pB.next
            
    return dummy.next  # 返回交集链表
五、复杂度分析
  • 时间复杂度:O(m + n),其中 m 和 n 分别为链表A和链表B的长度。
  • 空间复杂度:O(1)(如果不考虑结果链表的存储)。
六、总结

通过使用双指针法,可以高效地找出两个有序链表的交集元素。该方法不仅简单易懂,而且具有较好的时间和空间性能。理解这一方法对于处理有序数据结构的交集问题非常重要。

相关推荐
张彦峰ZYF6 小时前
Python 模式匹配与高效正则表达式:从语言特性到工程级简单实践
python·正则表达式
小北方城市网12 小时前
第2课:零基础前端框架实操入门——从核心语法到第一个完整项目
javascript·ai·正则表达式·json·html5
铉铉这波能秀2 天前
正则表达式从入门到精通(字符串模式匹配)
java·数据库·python·sql·正则表达式·模式匹配·表格处理
利刃大大2 天前
【JavaSE】Stream API && Optiona类 && 正则表达式
正则表达式
Dxy12393102163 天前
Python的正则表达式如何做数据校验
开发语言·python·正则表达式
Tranquil_ovo3 天前
【RegExp】正则表达式 - 基础语法
正则表达式
課代表3 天前
正则表达式中的“*”为何不是通配符?
正则表达式·dos·bat·批处理·匹配·通配符·转义
[J] 一坚4 天前
Shell 脚本解锁 curl/iptables/Nginx 日志分析等实战用法
linux·服务器·正则表达式·系统架构·自动化
Dxy12393102164 天前
Python的正则表达式入门:从小白到能手
服务器·python·正则表达式
realhuizhu5 天前
是猫踩键盘还是乱码?不,这是你刚写的正则表达式
正则表达式·regex·代码质量·开发效率·ai编程助手