当前位置: 首页 > news >正文

008、相交链表

0、题目描述

相交链表
在这里插入图片描述

1、法1

嵌套循环,从listA的第一个节点开始与listB的每个节点比对,有相同的就返回这个节点。
时间复杂度是n^2

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{struct ListNode* pa = headA;struct ListNode* pb = headB;while (pa){pb = headB;while (pb){if (pa == pb){return pa;}pb = pb->next;}pa = pa->next;}return NULL;
}

2、法2

不用循环的方式找交点,如果双指针一起走的话,listA和listB的长度不同,容易错过交点位置。
所以先求listA和listB的长度,然后对齐一下,再双指针一起走就可以了。
如果有交点,尾节点一定是一样的,让长链表的指针先走一会儿,再齐头并进,就能找到交点。在这里插入图片描述
如图,让listB的指针先走1下,就可以齐头并进了。lenB - lenA = 1

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{int lenA = 1;   int lenB = 1;struct ListNode* curA = headA;    struct ListNode* curB = headB;while (curA->next){curA = curA->next;lenA++;}while (curB->next){curB = curB->next;lenB++;}if (curA != curB)return NULL;else{//注意这里的条件LenA > lenB必须一样,在一样的条件下做出不一样的选择。struct ListNode* LongList = lenA > lenB ? headA : headB;struct ListNode* ShortList = lenA > lenB ? headB : headA;//abs是求绝对值的宏,这里的gap代表长度差int gap = abs(lenA - lenB);while (gap--){LongList = LongList->next;}//while (LongList->next){if (LongList == ShortList)break;LongList = LongList->next;ShortList = ShortList->next;}return LongList;}
}

在这里插入图片描述


http://www.mrgr.cn/news/53453.html

相关文章:

  • (01)fastapi的基础学习——开启学习之路
  • JavaScript (基础)
  • 【力扣打卡系列】滑动窗口与双指针(两数之和)
  • 优化漏洞扫描流程以保障企业数字化业务安全
  • 【AI学习】Mamba学习(八):HiPPO通用框架定义和方法
  • 小白学电路之电流镜仿真
  • OpenLayers:用于在 web 应用程序中创建互动地图
  • 目标检测最新SOTA模型D-FINE
  • 【分布式微服务云原生】《Redis 分布式锁的挑战与解决方案及 RedLock 的强大魅力》
  • UG NX12.0建模入门笔记:1.1 UG界面编辑
  • 【Gitee版】一篇教你如何快速入门git(详解)
  • Android 下通过触发 SIGTRAP 信号实现反调试
  • Broker 模式
  • 使用Git进行版本控制
  • TCP——Socket
  • 大型敏捷SAFe的关键职能最全解释
  • Python分析生存数据与截尾
  • Cisco Nexus N93108转换模式for Nxos to ACI mode失败案例
  • 笔试强训10.19
  • 银河麒麟V10系统+Windows10双系统启动顺序正确修改方法