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

LeetCode HOT100 - 相交链表

大学虽然在打 ACM ,但为了之后夏令营准备机试或者之后面试的机试的时候准备写一下 leetcode 上的 hot100 时感觉题目风格或者知识点上还是有比较大的差异(板子抄多了以及基础数据结构不太写导致的()),所以打算从头做一遍顺便基本整理一下

  1. 应该使用 nullptr 而不是 null,nullptr 是 C++11 引入的空指针常量,表示"不指向任何地址的指针"
  2. 如果是对象的话可以直接用 .,含义是访问成员(变量,函数等);但如果是指针的话只能使用 ->,因为要先解引用再访问成员

不难想到用一个数组去存一下一个链表中一个节点有没有出现过,在遍历另一条链的时候进行判断
但因为是要尾部全部相同,所以要逐个判断是否相同,不相同的话就要更新

/*** 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) {vector<int> vis(10005);auto cur = headA;while (cur != nullptr) {vis[cur->val] = 1;cur = cur->next;}cur = headB;ListNode *ans = nullptr;while (cur != nullptr) {if (vis[cur->val]) {if (ans == nullptr) {ans = cur;}} else {ans = nullptr;}cur = cur->next;}return ans;}
};

这样是值相同,不是内存地址相同

所以物理地址的话要直接存储指针

/*** 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) {unordered_set<ListNode *> st;while (headA != nullptr) {st.insert(headA);headA = headA->next;}while (headB != nullptr) {if (st.find(headB) != st.end()) {return headB;}headB = headB->next;}return headB;}
};
进阶

要求时间复杂度 O(n + m),空间复杂度 O(1)
也就是没有额外的空间让我们存储信息了
时间复杂度指引我们继续考虑连续遍历两条链

既然没法维护信息,那么考虑在遍历的过程中能做些什么

上面是一次遍历,也就是从 A 开始的,那么要做些变化的话,想到同时遍历,也就是一个从 A 出发,一个从 B 出发

发现因为尾部是相同的,而 两条链 并起来走的时候长度又是相同的

也就是它们会直接走到那一个交点上

但是注意不能这样写

/*** 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) {while (headA != headB) {headA = headA != nullptr ? headA->next : headB;headB = headB != nullptr ? headB->next : headA;}return headA;}
};

因为这样相当于 headA 和 headB 在发生变化,这样走完一条要走另一条的时候找不到头节点

/*** 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) {auto a = headA, b = headB;while (a != b) {a = a != nullptr ? a->next : headB;b = b != nullptr ? b->next : headA;}return a;}
};
http://www.jsqmd.com/news/491472/

相关文章:

  • ADRC优于PID?真相揭秘
  • 2026年3月浮动球阀供应厂家技术实力分析,浮动球阀分析技术实力与市场典范解析 - 品牌推荐师
  • docker下载安装-镜像加速-镜像制作
  • Android Drawable,ColorMatrix
  • 手把手教你用coze搭建AI Agent(智能体)
  • Hi3519芯片开发过程笔记:四、Uboot环境变量nand_env.bin镜像生成方法(默认环境变量设置方法)
  • C语言链表练习
  • Innode引擎监控的开启的方法
  • C盘清理指南(三)——文件目录更改
  • 闲置大润发购物卡别浪费!超全回收实操指南,新手也能零踩坑 - 京回收小程序
  • mysql版本详解
  • P1248 加工生产调度 - Johnson 法则如何使用 - java版
  • 10分钟上手SIMP:从安装到基础配置的快速入门指南
  • 国产先进封装设计软件选型指南:2026对标Cadence SIP的国产工具推荐 - 品牌2026
  • 如何学习硬件设计——理论篇
  • 百联卡回收最新攻略:方法和流程详解 - 猎卡回收公众号
  • AF350标记α-银环蛇d素,AF350-a-Bungarotoxin核心功能与应用场景
  • 甩掉API硬编码包袱:2026桌面级办公智能体选型指南及实在Agent等主流工具横评
  • 上海劳力士维修哪里好?南京/北京/杭州等六大城高端腕表维修科普+正规门店指引 - 时光修表匠
  • 数学危机、经典悖论
  • AF405标记α-银环蛇d素,AF405-a-Bungarotoxin的分子基础与结构特性
  • 整厂回收厂家有哪些?陕西地区专业电线电缆等资源设备回收服务商真实推荐 - 深度智识库
  • 推荐:SortPhotos——照片智能整理神器
  • printf输出语句
  • 人工智能教程 - 前言
  • 简单分享沃尔玛电子卡回收的高效方案 - 猎卡回收公众号
  • 2026年野奢定制庄园住宿套餐评测报告:香格里拉设计感民宿/香格里拉避世民宿/香格里拉野奢度假/选择指南 - 优质品牌商家
  • STM32F072 CAN and USB
  • 在英伟达全栈 AI 基建布局下的GPU算力平台选择逻辑
  • 电工记