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

【Leedcode】数据结构中链表必备的面试题(第四期)

【Leedcode】数据结构中链表必备的面试题(第四期)


文章目录

  • 【Leedcode】数据结构中链表必备的面试题(第四期)
    • 1.题目
    • 2.思路+图解
    • (1)思路一
    • (2)思路二
    • 3.源代码
  • 总结


1.题目

  1. 相交链表: 如下(示例):
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。

1.判断两个链表是否相交? 2.如果相交,求交点


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


2.思路+图解

(1)思路一

暴力求解-穷举法。依次取A链表中的每个节点跟B链表中的所有结点比较。
如果有相同的结点,就是相交,第一个相同的交点就是公共结点。这样做的时间复杂度为:O(N^2)
那么我们如何把时间复杂度优化到:O(N)


(2)思路二

1.尾结点相同就是相交,否则就不相交
2.求交点:长的链表先走(长度差)步,再同时走,第一个相同的结点就是交点
具体如下图


在这里插入图片描述


再这里要注意:可以用lenA和lenB去算两个链表的长度,方便求交点位置,如下图
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


3.源代码

代码如下(示例):

struct ListNode 
{int val;struct ListNode *next;
};
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode* pheadA = headA;struct ListNode* pheadB = headB;//先判断是否为环形结构int lenA = 1;while(pheadA -> next){lenA++;pheadA = pheadA -> next;}int lenB = 1;while(pheadB -> next){lenB++;pheadB = pheadB -> next;}if(pheadA != pheadB){return NULL;}int sub = abs(lenA - lenB);struct ListNode* longlist = headA;struct ListNode* shortlist = headB;if(lenA < lenB){longlist = headB;shortlist = headA;}//长的先走sub步while(sub--){longlist = longlist -> next;}//俩个开始一起走while(longlist != shortlist){longlist = longlist -> next;shortlist = shortlist -> next;}return longlist;
}

总结

以上就是今天要讲的内容,本文介绍数据结构中链表必备的面试题(第四期)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

http://www.lryc.cn/news/19047.html

相关文章:

  • 【2023】助力Android金三银四面试
  • Leetcode.1801 积压订单中的订单总数
  • 红帽Linux技术-cp命令
  • 代码随想录算法训练营day41 | 动态规划 01背包问题基础 01背包问题之滚动数组
  • MyBatis学习笔记(三) —— MyBatis核心配置文件详解
  • 使用GDAL进行坐标转换
  • 日常编程中和日期相关的代码和bug
  • ATT与Intel汇编语法区别
  • Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介绍
  • 2023年网红营销10大趋势解读:品牌出海必看
  • Java学习笔记 --- 正则表达式
  • 【基础算法】字符串哈希
  • unity 多个模型或物体无限循环拖拽 类似无限列表循环
  • GroupDocs.Merger for Java
  • 04--WXML
  • 一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (五)
  • 每月一书(202302)《狂飙》
  • wsl2 docker 安装
  • 极光笔记 | 埋点体系建设与实施方法论
  • SpringMVC中的各注解类理解
  • DNF搭建服务器服务端搭建教程
  • 【论文简述】Learning Optical Flow with Adaptive Graph Reasoning(AAAI 2022)
  • qt QCustomPlot学习
  • 【HDFS】FsDatasetImpl系列文章(七):finalizeBlock方法和unfinalizeBlock方法
  • 测试部门来了个99年的卷王之王,老油条感叹真干不过,但是...
  • CSS 网页动画【快速掌握知识点】
  • 电脑技巧:分享六个非常实用的资源网站
  • 【Java基础 下】 027 -- 异常、File、综合案例
  • 教师管理系统的设计与实现
  • 【Java】线程使用方式