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

160. 相交链表 LeetCode 热题 HOT 100

目录

    • 过程解析
      • 1. 初始化指针
      • 2. 遍历过程
      • 3. 相交节点分析
    • 源码
      • C++
      • C语言

过程解析

1. 初始化指针

  • 定义两个指针 pApB,分别指向链表 A 和链表 B 的头结点。
  • 两个指针以步长为 1 向各自链表尾部遍历。

2. 遍历过程

  • pA 遍历到链表 A 的尾节点时,走过了 a 个节点,将 pA 指向链表 B 的头节点继续遍历。
  • pB 遍历到链表 B 的尾节点时,走过了 b 个节点,将 pB 指向链表 A 的头节点继续遍历。

3. 相交节点分析

  • 假设两链表在节点 c1 开始相交,公共尾部长度为 c
  • pA 从链表 B 遍历到交点 c1 时,总步数为:
pA总步数 = a + (b - c)
  • pB 从链表 A 遍历到交点 c1 时,总步数为:
pB总步数 = b + (a - c)
  • 因为:
a + (b - c) = b + (a - c)

所以当链表有公共尾部(c > 0)时,两个指针会同时到达第一个交点 c1
如果链表不相交(c = 0),当移动两个链表长度的最大公倍数次数,两个指针最终会同时到达 NULL

源码

C++

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {// 边界判断:如果任意链表为空,直接返回 nullptrif(headA == nullptr || headB == nullptr) return nullptr;// 使用两个指针 pA 和 pB 遍历链表// pA 指向链表 A 的头节点,pB 指向链表 B 的头节点// 注意:这只是让 pA/pB 指向链表的节点,不会改变 headA/headB 本身ListNode *pA = headA, *pB = headB;// 双指针循环,直到两个指针相遇(找到交点)或都为 nullptr(无交点)while(pA != pB){// 如果 pA 到达链表 A 尾部,则跳到链表 B 头部,否则向后移动pA = (pA == nullptr) ? headB : pA->next;// 如果 pB 到达链表 B 尾部,则跳到链表 A 头部,否则向后移动pB = (pB == nullptr) ? headA : pB->next;}// 循环结束时:// 1. 如果链表相交,pA/pB 指向第一个交点节点// 2. 如果链表不相交,pA/pB 为 nullptrreturn pA;}
};

C语言

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {// 边界判断:如果任意链表为空,直接返回 NULLif (headA == NULL || headB == NULL) return NULL;// 定义两个指针,分别指向链表 A 和链表 B 的头节点// 注意:这里是指针赋值,不会改变 headA 和 headB 本身struct ListNode *pA = headA;struct ListNode *pB = headB;// 双指针遍历循环// 当两个指针不相等时,继续循环// 循环会在两指针相遇(相交节点)或都为 NULL(无交点)时退出while (pA != pB) {// 指针 pA 向后移动一步// 如果到达链表尾部,跳到链表 B 的头节点继续遍历pA = (pA == NULL) ? headB : pA->next;// 指针 pB 向后移动一步// 如果到达链表尾部,跳到链表 A 的头节点继续遍历pB = (pB == NULL) ? headA : pB->next;}// 循环结束:// 1. 如果链表相交,pA/pB 指向第一个交点节点// 2. 如果链表不相交,pA/pB 为 NULLreturn pA;
}
http://www.dtcms.com/a/442652.html

相关文章:

  • 厦门论坛网站建设东莞东城邮编
  • 网站改版分析ip代理池
  • 旧房翻新装修公司排名自己的网站怎样做优化
  • 自适应h5网站建筑业企业资质标准建设部网站
  • pc端网站建设相关查阅资料网络营销的网站分类有哪些
  • 高端网站建设公司报价机票网站制作
  • 简单的个人网站模板h5制作工具免费版
  • Base64 原理与 C++ 实现
  • 网站推广优化教程手机端网页设计尺寸规范
  • Web3 RWA 品牌的价值跃迁:从竞争到共赢的网络共建
  • 如何进入网站管理员界面wordpress需要的系统
  • 建个企业网站还是开个淘宝店老域名重新做网站
  • thinkphp企业网站源码全国建设网站
  • 长春火车站什么时候通车徐州网站建设商城制作网站推广seo
  • C++ 11包装库,lambda的用法
  • 湖南省百川电力建设有限公司网站四川万景建设工程有限公司网站
  • 网页设计与网站建设案例教程wordpress 教育模版
  • 《P2679 [NOIP 2015 提高组] 子串》
  • 011 Rust数组
  • 【贪心之临项交换】P8732 [蓝桥杯 2020 国 ABC]|普及
  • macOS 内核路由表操作:直接 API 编程指南
  • 如何做英文系统下载网站椒江做国际网站的公司
  • Linux常用命令使用大全,含运行示例。
  • 实战项目——前端
  • 基于Vue的园区农机管理系统的设计与实现toepr41x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Python 3.14.0rc3 新特性说明(对比3.13版本)
  • 中国建设基础设施公司网站网站建设要什么知识
  • 网站建设培训会讲话合肥做网站需要多少钱
  • Python爬虫四大核心工具解析
  • 用Python的psutil库来获取操作系统的内存详情示例