博客
关于我
leetcode-相交链表-15
阅读量:282 次
发布时间:2019-03-01

本文共 1346 字,大约阅读时间需要 4 分钟。

如何找到两个单链表的相交起始节点?

在编程过程中,我们有时需要处理单链表数据结构的问题,其中一个常见问题是如何找到两个单链表的起始相交节点。以下是解决这个问题的详细思路和代码实现。

思路

找到两个单链表相交起始节点的关键在于以下几个步骤:

  • 计算链表长度:首先,我们需要计算两个链表的长度。通过遍历每个链表,我们可以确定每个链表的结尾节点的位置。

  • 检查是否相交:如果两个链表的末尾节点不在同一个位置,那么它们显然不相交。此时,我们可以直接返回NULL

  • 计算长度差值:如果两个链表的末尾节点位置相同,那么它们必定相交。接下来,我们需要计算两个链表的长度差值,并让较长的链表从头开始移动这个差值的位置。这样,两个链表的末尾节点就能对齐。

  • 同时遍历链表:从对齐后的位置开始,同时遍历两个链表,找到第一个相同的节点,这个节点就是两个链表的起始相交节点。

  • 这种方法的核心思想是通过计算链表长度差值来对齐两个链表,然后再同时遍历它们,从而高效地找到相交的起始节点。

    代码实现

    以下是基于上述思路的代码实现:

    struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    int lenA = 0, lenB = 0;
    struct ListNode* curA = headA;
    struct ListNode* curB = headB;
    // 计算两个链表的长度
    while (curA) {
    curA = curA->next;
    lenA++;
    }
    while (curB) {
    curB = curB->next;
    lenB++;
    }
    // 检查是否相交的条件
    if (curA != curB) {
    return NULL;
    }
    // 计算长度差值
    int n = abs(lenA - lenB);
    curA = headA;
    curB = headB;
    // 对齐两个链表
    while (n--) {
    if (lenA > lenB) {
    curA = curA->next;
    }
    if (lenA < lenB) {
    curB = curB->next;
    }
    }
    // 同时遍历,找到第一个相交节点
    while (curA != curB) {
    curA = curA->next;
    curB = curB->next;
    }
    return curA;
    }

    总结

    通过上述方法,我们可以高效地找到两个单链表的起始相交节点。这种方法的时间复杂度为 O(n),其中 n 是两个链表的总长度。这种复杂度在大多数实际应用中都是可以接受的。

    转载地址:http://ncno.baihongyu.com/

    你可能感兴趣的文章
    mysql where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>
    MySQL Workbench安装教程以及菜单汉化
    查看>>
    MySQL Xtrabackup 安装、备份、恢复
    查看>>
    mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
    查看>>
    MySQL _ MySQL常用操作
    查看>>
    MySQL – 导出数据成csv
    查看>>
    MySQL —— 在CentOS9下安装MySQL
    查看>>
    MySQL —— 视图
    查看>>
    mysql 不区分大小写
    查看>>
    mysql 两列互转
    查看>>
    MySQL 中开启二进制日志(Binlog)
    查看>>
    MySQL 中文问题
    查看>>
    MySQL 中日志的面试题总结
    查看>>
    mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
    查看>>
    MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
    查看>>
    Mysql 中的日期时间字符串查询
    查看>>
    mysql 中索引的问题
    查看>>
    MySQL 中锁的面试题总结
    查看>>