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

leetcode106.相交链表

目录

  • 问题描述
  • 示例
    • 提示
  • 具体思路
    • 思路一
    • 思路二
  • 代码实现

问题描述

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:

在这里插入图片描述
题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

  • intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
  • listA - 第一个链表
  • listB - 第二个链表
  • skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
  • skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数

题目链接:相交链表

示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

提示

  listA 中节点数目为 m
  listB 中节点数目为 n
  1 <= m, n <= 3 * 104
  1 <= Node.val <= 105
  0 <= skipA <= m
  0 <= skipB <= n
  如果 listA 和 listB 没有交点,intersectVal 为 0
  如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]

具体思路

思路一

  遍历listA链表,将listA链表中的每个值与listB链表中每个节点的值进行比较,比较节点地址相等的话就是交点。但是这种方法的时间复杂度比较高是O( N 2 N^2 N2

思路二

  先分别找listA链表和listB链表的尾,如果尾节点相等,那么就是相交链表,不是就直接返回NULL,然后分别计算链表的长度,让长的链表先走他们的长度差值步,然后再同时走,如果走到节点的地址是一样的话,那么就是相交的节点
在这里插入图片描述

代码实现

//思路2
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode* tailA=headA;
    struct ListNode* tailB=headB;
	int lenA=1,lenB=1;
    while(tailA->next)
    {
        tailA=tailA->next;
        lenA++;
    }

    while(tailB->next)
    {
        tailB=tailB->next;
        lenB++;
    }

    if(tailA!=tailB)
    {
         return NULL;
    }
   
    int gap =abs(lenA-lenB);
    struct ListNode* longlist=headA;
    struct ListNode* shortlist=headB;
    
    if(lenA<lenB)
    {
        longlist=headB;
        shortlist=headA;
    }

    while(gap--)
    {
        longlist=longlist->next;
    }

    while(longlist!=shortlist)
    {
         longlist=longlist->next;
         shortlist=shortlist->next;
    }
    
    return longlist;
}

http://www.kler.cn/a/572110.html

相关文章:

  • Pytorch构建LeNet进行MNIST识别 #自用
  • es 安装ik分词器
  • Spring Bean 作用域设置为prototype在并发场景下是否是线程安全的
  • 【第14节】C++设计模式(行为模式)-Strategy (策略)模式
  • http 状态码秒记速查(附速记口诀)
  • 【redis】redis持久化
  • 京东Hive SQL面试题实战:APP路径分析场景解析与幽默生存指南
  • 爬虫:一文掌握 Celery 分布式爬虫,及对应实战案例
  • 【应急响应工具教程】一款自动化分析网络安全应急响应工具--FindAll
  • ArcGIS操作:12 矢量shp属性筛选并导出
  • 盛元广通中小型科技创新实验室LIMS系统
  • 基于SpringBoot+Vue的医院挂号管理系统+LW示例参考
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序
  • Python----数据分析(Matplotlib三:绘图二:箱图,散点图,饼图,热力图,3D图)
  • anolis8.9-k8s1.32-系统基本配置
  • Tomcat原理:HTTP协议与HTTPS协议
  • FastGPT 源码:RRF、Rerank 相关代码
  • Spring Boot 中短时间连续请求时出现Cookie获取异常问题
  • uniapp+vue3搭建项目
  • 【powerjob】 powerjobserver注册服务IP错误