目录

  • 一、题目

    • 思路
    • 代码
  • 二、总结

一、题目

#include <iostream>
#include <stack>
using namespace std;
//链表结点声明如下:
struct ListNode
{int m_nKey;ListNode * m_pNext;};//求两个单链表相交的第一个节点
ListNode* GetFirstCommonNode(ListNode * pHead1, ListNode * pHead2)
{}

思路1

对第一个链表遍历,计算长度len1,同时保存最后一个节点的地址。

对第二个链表遍历,计算长度len2,同时检查最后一个节点是否和第一个链表的最后一个节点相同,若不相同,不相交,结束。

两个链表均从头节点开始,假设len1大于len2,那么将第一个链表先遍历len1 - len2个节点,此时两个链表当前节点到第一个相交节点的距离就相等了,然后一起向后遍历,知道两个节点的地址相同。

时间复杂度,O(len1 + len2)。

代码

ListNode* GetFirstCommonNode(ListNode * pHead1, ListNode * pHead2)
{if (pHead1 == NULL || pHead2 == NULL)return NULL;int len1 = 1;ListNode * pTail1 = pHead1;while (pTail1->m_pNext != NULL){pTail1 = pTail1->m_pNext;len1++;}int len2 = 1;ListNode * pTail2 = pHead2;while (pTail2->m_pNext != NULL){pTail2 = pTail2->m_pNext;len2++;}if (pTail1 != pTail2) // 不相交直接返回NULLreturn NULL;ListNode * pNode1 = pHead1;ListNode * pNode2 = pHead2;// 先对齐两个链表的当前结点,使之到尾节点的距离相等if (len1 > len2){int k = len1 - len2;while (k--)pNode1 = pNode1->m_pNext;}else{int k = len2 - len1;while (k--)pNode2 = pNode2->m_pNext;}while (pNode1 != pNode2){pNode1 = pNode1->m_pNext;pNode2 = pNode2->m_pNext;}return pNode1;
}

思路2

我们可以运用数学的加法交换律来尝试着简化上面的写法

加法交换律:a+b=b+a

用链表来理解一下加法交换律:

链表1(a):A->B->C

链表2(b):D->E->F

a + b = A->B->C->D->E->F

b + a = D->E->F->A->B->C

链表3(a):A->B->C->F->G

链表4(b):D->E->F->G

a+b=A->B->C->F->G->D->E->F->G

b+c=D->E->F->G->A->B->C->F->G

代码


//求两个单链表相交的第一个节点
ListNode* GetFirstCommonNode(ListNode * pHead1, ListNode * pHead2)
{if(pHead1==NULL || pHead2==NULL)return NULL;ListNode* pA = pHead1;ListNode* pB = pHead2;while(pA != pB){pA = pA != nullptr ? pA->m_pNext : pHead2;pB = pB != nullptr ? pB->m_pNext : pHead1;}return pA;
}

在这里用到了 ?:三目运算符,提高运算效率,优化代码。这是以后写代码的过程中时常要注意的事情。

总结

用数学的知识点来合理优化我们写的代码

算法题:求两个单链表相交的第一个节点相关推荐

  1. 左神算法:两个单链表相交的一系列问题(链表是否有环 / 两无环链表是否相交 / 两有环链表是否相交)

    本题来自左神<程序员代码面试指南>"两个单链表相交的一系列问题"题目. 题目 在本题中,单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, ...

  2. 两个单链表相交的一系列问题-Java

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net package live.every.day.Pro ...

  3. 两个单链表相交的一系列问题

    两个单链表相交的一系列问题 在本题中,单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2,这两个链表可能相交,也可能 不相交.请实现一个函数,如果两个链表相交,请返回相交的 ...

  4. 链表问题11——两个单链表相交的系列问题(四):总结

    题目 请实现一个函数,如果两个链表相交,请返回相交的第一个节点,如果不相交,返回null即可.链表可能有环或无环. 要求 如果链表1的长度为N,链表2的长度为M,时间复杂度达到O(M+N),额外空间复 ...

  5. 两个单链表相交的一系列问题----0_0

    这道题emmm,难度相对来说很大额. 主要是要分成三种情况来考虑: 1. 两个链表都无环: 2. 两个链表都有环: 3. 一个有环一个无环,这种情况是不用 考虑的,一定没有交点(姥姥记住:单链表仅有一 ...

  6. 链表问题11——两个单链表相交的系列问题(三):判断两个有环链表是否相交

    题目 判断两个有环链表是否相交,相交则返回第一个相交节点,否则返回null 在考虑此问题时,根据前面几篇文章的解法,我们已经得到了各自链表的入环节点,分别为loop1和loop2 思路 以下是问题三的 ...

  7. 链表问题11——两个单链表相交的系列问题(二):找到两个无环链表的交点

    题目 判断两个无环链表是否相交,相交则返回第一个相交节点,否则返回null 思路 分别遍历链表1和链表2,最后一个节点分别即为end1和end2,长度分别记为len1和len2 如果end1不等于en ...

  8. 链表问题11——两个单链表相交的系列问题(一):找到有环链表的环入口节点

    题目 判断一个链表是否有环,如果有,则返回第一个进入环的节点,没有则返回null. 思路 如果一个链表没有环,那么遍历链表一定可以遇到链表的终点:如果链表有环,那么遍历链表就永远在环里转下去了.如何找 ...

  9. 算法学习18-两个单链表相交的一系列问题

    两个单链表相交的一系列问题 [题目] 在本题中,单链表可能有环,也可能无环.给定两个单链表的头节点 head1和head2,这两个链表可能相交,也可能不相交.请实现一个函数, 如果两个链表相交,请返回 ...

最新文章

  1. kafka管理器kafka-manager部署安装
  2. 网页设计简约_简约设计指南
  3. 巨头垄断,Facebook直接封杀了一个国家!
  4. linux java字符集编码_Java字符集编码
  5. YUV420数据格式
  6. 问道五周年服务器维护公告,问道五周年 欢乐嘉年华
  7. rocketmq安装部署过程(4.0.0版本)
  8. java1.8win7_JDK 1.8 安装配置教程(win7 64bit )
  9. struts2整合spring3整合成功但是spring无法注入
  10. 开源的魔兽世界参考架构——mangos--网络游戏引擎BigWorld 服务器介绍
  11. 快应用中实现自定义抽屉组件
  12. 宫崎骏电影-Music
  13. 十七、DPM模型参数设置详解
  14. 笔记本的网络出现红叉,网络连接不上,网络不可用
  15. 企业该如何用短信推广
  16. eap wifi 证书_用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)
  17. 如何一步步实现异步上传图片并预览图片(异步加载图片)
  18. 开源Hanlp自然语言处理Java实现(词法分析、关键词)
  19. 解决AttributeError: ‘NoneType‘ object has no attribute ‘val‘ if left.val!=right.val:Line 17 问题
  20. 移动端touch事件,实时获取touchmove移动下的最新元素

热门文章

  1. 2017年程序猿的九大提升点(微记录)
  2. 44-网上商城数据库-商品分类数据操作(一)
  3. 模拟实验室合成器插件-Arturia Analog Lab v5.2.0 WiN
  4. java中的in的语法_java的输入语法
  5. python藏头诗_Python简单实现表白藏头诗
  6. 2022re:Invent:亚马逊云科技拥有强大的云原生数据能力
  7. 1198:逆波兰表达式(递归)
  8. 语言的种类和职业类别所需的语言解说Part 2
  9. 系统集成项目管理工程师培训重点总结
  10. Aria2GUI for macOS - 百度网盘高速下载