LeetCode 热题 100 | 链表(上)

目录

1  基础知识

1.1  空指针

1.2  结构体

1.3  指针访问

1.4  三目运算符

2  160. 相交链表

3  206. 反转链表

4  234. 回文链表


菜鸟做题第三周,语言是 C++

1  基础知识

1.1  空指针

使用 nullptr 来判断是否为空指针:

if (headA == nullptr)

“NULL 在 C++ 中就是 0,这是因为在 C++ 中 void* 类型是不允许隐式转换成其他类型的,所以之前 C++ 中用 0 来代表空指针,但是在重载整型的情况下,会出现上述的问题。所以,C++11 加入了 nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议以后还是都用 nullptr 替代 NULL 吧,而 NULL 就当做 0 使用。”

摘自博客:C++ 中 NULL 和 nullptr 的区别

1.2  结构体
struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};
  • val 和 next 都是结构体 ListNode 中的元素
  • val 表示当前链表节点的值
  • next 表示指向下一个链表节点的指针
  • ListNode(int x) : val(x), next(NULL) {} 是初始化方法

1.3  指针访问
ListNode * p;p->val;  // 访问值
p->next;  // 访问下一节点指针

1.4  三目运算符
pA = pA == nullptr ? headB : pA->next;

其中,“?” 前的是判断条件,“?” 后的是两个选项,“:” 前的是条件成立时选择的选项,“:” 后的是条件不成立时选择的选项。这里的 “pA == nullptr” 是判断条件,“headB” 是 “pA == nullptr” 成立时 “pA” 等于的值,“pA->next” 是 “pA == nullptr” 不成立时 “pA” 等于的值。

三目运算符不是为了装逼用的,真的可以在很多情况下简化判断结构。

2  160. 相交链表

妈呀,这是我大一下程算课期末的真题

解题思路:

假设蓝色段的长度为 a,绿色段的长度为 b,黄色段的长度为 c 。定义 pA 和 pB 两个指针,pA 遍历完 a + c 后遍历 b,pB 遍历完 b + c 后遍历 a,判断:

  • 若 pA 和 pB 相遇且节点不为空,则表明两条链表相交
  • 若 pA 和 pB 未相遇或节点为空,则表明两条链表不相交

这种解法用到了一点数学思想:

a+b+c

即 pA 和 pB 最终都会到达同一位置,它们在该位置指向的节点是否一致决定了链表是否相交。

如有疑问请参考官方题解,它的分情况讨论更加详细。

class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA == nullptr || headB == nullptr) {return nullptr;}ListNode * pA = headA, * pB = headB;while (pA != pB) {pA = pA == nullptr ? headB : pA->next;pB = pB == nullptr ? headA : pB->next;}return pA;}
};

3  206. 反转链表

解题思路:把所有节点的 next 指针全部反向即可。

思路说明图:

对于这种反转问题,核心思想就是把已经遍历过的、但还需要用到的位置保存下来。

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode * prev = nullptr;ListNode * curr = head;while (curr) {ListNode * next = curr->next;curr->next = prev;prev = curr;curr = next;} return prev;}
};

4  234. 回文链表

解题思路:

  1. 遍历链表,把所有 val 存入一个数组中
  2. 遍历数组的前半段,判断里面的 val 是否和后半段的 val 对称
class Solution {
public:bool isPalindrome(ListNode* head) {ListNode * p = head;vector<int> vals;while (p) {vals.push_back(p->val);p = p->next;}for (int i = 0; i < vals.size() / 2 + 1; ++i) {if (vals[i] != vals[vals.size() - i - 1]) return false;}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3支持在通过requests库调试django后台接口写测试用例

python测试用例库使用 unittest库可以支持单元测试用例编写和验证。 基本使用方法 运行文件可以将文件中的用例全部执行一遍 import unittestclass TestBasicFunc(unittest.TestCase):def test_basic_asert(self):self.assertEqual(1, 1)if __name__"__main__":u…

Kafka集群搭建

Kafka集群是把状态保存在Zookeeper中的&#xff0c;首先要搭建Zookeeper集群。 本期是分享Kafka&#xff0c;若想看zookeeper搭建请看&#xff1a;zookeeper搭建&#xff08;单机模式和集群模式)-CSDN博客 ​​​​​​​ ​​…

最新!2024顶级SCI优化!TTAO-CNN-BiGRU-MSA三角拓扑聚合优化、双向GRU融合注意力的多变量回归预测程序!

适用平台&#xff1a;Matlab 2023版及以上 TTOA三角聚合优化算法&#xff0c;将在2024年3月正式发表在中科院1区顶级SCI期刊《Expert Systems with Applications》上。 该算法提出时间极短&#xff0c;目前以及近期内不会有套用这个算法的文献。新年伊始&#xff0c;尽快拿下…

主机安全加固之-openssh版本升级

升级openssh之前&#xff0c;为了保证能正常通过工具连接主机&#xff0c;咱们开启telnet服务&#xff0c;通过telnet的方式登录主机 一&#xff1a;开启telnet服务 1.安装telnet服务 [rootlocalhost ~]# yum install –y telnet telnet-server xinetd2.修改telnet服务配置文…

Docker中安装MySql的遇到的问题

目录 一、mysql查询中文乱码问题 1. 进入mysql中进行查看数据库字符集 2. 修改 my.cnf 中的配置 3. 重启mysql容器&#xff0c;使得容器重新加载配置文件 4. 测试结果 二、主从同步中遇到的问题 2.1 Slave_IO_Running:Connecting 的解决方案 1. 确定宿主机防火墙开放my…

留学生怎么合理使用ChatGPT ?还有哪些同类工具可以使用?

一篇篇相关于ChatGPT的文章陆陆续续铺天盖地的出现在我们面前。今天我们来看看怎么使用这个宝藏工具&#xff01; 文章主要内容为&#xff1a; 1.它是什么&#xff1f; 2.它能做什么&#xff1f; 3.作为留学生我们怎么使用它&#xff1f; 4.其他同类工具推荐 5.个人观点 一…

unity addressables 加载资源和场景 显示进度条(主要用于WebGL)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、addressables是什么&#xff1f;二、导入Addressables三、创建Addressables Settings 资产包管理四、资源打包五、环境模拟六、查看重复资源七、选择Bundle…

算法——A/算法通识

目录 一、复杂度分析 A/时间复杂度 B/空间复杂度 C/分析技巧 二、枚举分析 A/枚举算法介绍 B/解空间的类型 C/循环枚举解空间 三、模拟算法 四、递归 A/递归介绍 递归的两个关键要素&#xff1a; B/递归如何实现 C/递归和循环的比较 一、复杂度分析 A/时间复杂度…

央视见证|“看见中国汽车”走进首家汽车供应链企业东软睿驰

由工业和信息化部支持指导&#xff0c;中国汽车工业协会和央视网联合出品的2023《看见中国汽车》专题东软睿驰篇正式上线&#xff0c;记录品牌向上专项行动走进首家汽车供应链企业&#xff0c;展示东软睿驰围绕“成为OEM 软件定义汽车时代最可信赖的合作伙伴”核心战略的创新发…

深入探索Java BIO与NIO输入输出模型:基于文件复制和socket通信

在Java中&#xff0c;处理I/O&#xff08;输入/输出&#xff09;操作的方式经历了从BIO&#xff08;Blocking I/O&#xff0c;阻塞式I/O&#xff09;到NIO&#xff08;New I/O 或 Non-blocking I/O&#xff0c;新I/O或非阻塞式I/O&#xff09;的演变。这两种模型在设计和使用上…

[C++]类和对象(中)

一:类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中并不是什么都没有&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的成员函数称为…

使用Python的Turtle模块简单绘制烟花效果

import turtle import random# 初始化屏幕 screen turtle.Screen() screen.bgcolor("black") screen.title("烟花模拟")# 创建一个Turtle来绘制烟花 firework turtle.Turtle() firework.hideturtle() firework.speed(0) # 设置绘图速度为最快# 绘制烟花…

GEDepth:Ground Embedding for Monocular Depth Estimation

参考代码&#xff1a;gedepth 出发点与动机 相机的外参告诉了相机在世界坐标系下的位置信息&#xff0c;那么可以用这个外参构建一个地面基础深度作为先验&#xff0c;后续只需要在这个地面基础深度先验基础上添加offset就可以得到结果深度&#xff0c;这样可以极大简化深度估…

springboot与springcloud之间的版本对应关系

https://start.spring.io/actuator/info 当然&#xff0c;你可以直接在&#xff1a; https://spring.io/projects/spring-cloud 上看文档查询&#xff0c; 不过&#xff0c;最后应该是调到这里的&#xff1a; https://github.com/spring-cloud/spring-cloud-release/wiki/Suppo…

C++:输入流/输出流

C流类库简介 C为了克服C语言中的scanf和printf存在的缺点。&#xff0c;使用cin/cout控制输入/输出。 cin&#xff1a;表示标准输入的istream类对象&#xff0c;cin从终端读入数据。cout&#xff1a;表示标准输出的ostream类对象&#xff0c;cout向终端写数据。cerr&#xff…

stable diffusion微调总结

stable diffusion微调总结 stable diffusion模型类别&#xff1a;SDSD2SDXLSDXL LCM&#xff08;潜在一致性模型&#xff09;SDXL DistilledSDXL Turbo 安装accelerate通过pip安装配置 accelerate config查看配置 安装diffusers数据处理BLIP模型优化 微调方法Dreambooth微调准备…

静态代理IP是如何助力跨境电商运营的?

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

微信小程序 安卓/IOS兼容问题

一、背景 在开发微信小程序时&#xff0c;不同的手机型号会出现兼容问题&#xff0c;特此记录一下 二、安卓/IOS兼容问题总结 2.1、new Date()时间转换格式时&#xff0c;IOS不兼容 问题&#xff1a;在安卓中时间格式2024-1-31 10:10:10&#xff0c;但是在iOS中是不支持 &q…

jQuery前段开发--星级评价和图形跟随指针移动

一、实验原理&#xff1a; 当鼠标移入某个星星&#xff0c;前面的星星都会被点亮&#xff1b;当鼠标移出&#xff0c;星星将会变暗&#xff0c;单击某个星星后&#xff0c;即可完成评论&#xff0c;此时鼠标移出后&#xff0c;被单击星星前面的星星都会被点亮&#xff0c;后面…

幻兽帕鲁社区服务器搭建架设开服教程(LINUX)

幻兽帕鲁社区服务器搭建架设开服教程&#xff08;LINUX&#xff09; 大家好我是艾西&#xff0c;上一期我给大家分享了windows系统版本的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对于服务器的配置有一定的要求很多小伙伴就思考用linux系统搭建的话占用会不会小一点&#x…