LeetCode:经典题之206、92 题解及延伸

系列目录

88.合并两个有序数组
52.螺旋数组
567.字符串的排列
643.子数组最大平均数
150.逆波兰表达式
61.旋转链表
160.相交链表
83.删除排序链表中的重复元素
389.找不同
1491.去掉最低工资和最高工资后的工资平均值
896.单调序列
206.反转链表
92.反转链表II
141.环形链表
142.环型链表


目录

  • 系列目录
  • 206. 反转链表
  • 92. 反转链表II
    • 类与结构体
    • 访问修饰符


206. 反转链表

🌟链表+递归+迭代

原题链接


C++

若未特殊标明,以下题解均写用C++

方法一 迭代
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/// 迭代// 比较费神hh
class Solution {
public:ListNode* reverseList(ListNode* head) {// presevse 一个 prev指针ListNode* prev = nullptr;// 定义 curr 让curr移动 curr开始指向“1”ListNode* curr = head;while (curr != nullptr) {// 定义 next 记录当前curr->next值ListNode* next = curr->next;// step1 让“1”指向空// 用完 prev 再改prevcurr->next = prev;prev = curr;curr = next;}// 每次反转 prev都会指向刚刚翻转完的节点// 迭代——个人的理解有点类似数学上的“同理可得”return prev; }
};

方法二 递归
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {// 链表为空 或 链表长度为1if (head == nullptr || head->next == nullptr)return head;ListNode* newHead = reverseList(head->next);head->next->next = head;head->next = nullptr;return newHead;}
};





92. 反转链表II

🌟链表+迭代

原题链接

本题有些困难,可以结合上一题多练几遍~
链表的题本身没什么算法上的难度,多画图就好啦

C++

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
// 迭代 反转一个链表
private:void reveseLinkedList(ListNode* head){// 在private 中新定义一个prev 指向空ListNode* prev = nullptr;ListNode* curr = head;while (curr != nullptr) {ListNode* next = curr->next;curr->next = prev;prev = curr;curr = next;}}public:ListNode* reverseBetween(ListNode* head, int left, int right) {ListNode* dummy = new ListNode (0, head);ListNode* prev = dummy;// 让prev 走到 left的前一个节点, 方便一会把反转链表接回来// 并定义leftNodefor (int i = 0; i < left - 1; i ++)prev = prev->next;// 定义rightNode 让rightNode走到 rightListNode* rightNode = prev;for (int i = 0; i < right - left + 1; i ++)rightNode = rightNode->next;// 截取需要反转的链表ListNode* leftNode = prev->next;ListNode* curr = rightNode->next;// 切段 反转链表prev->next = nullptr;rightNode->next = nullptr;reveseLinkedList (leftNode);// 接回 反转链表prev->next = rightNode;leftNode->next = curr;   return dummy->next;}
};
// 注意这个; 分号~

类与结构体

重要区别

  • 类和结构体的最主要的区别类默认private,结构体默认public
  • 一般把比较复杂的、代码较长的定义为类class,其余为结构体struct
  • 记得在末尾的闭大括号后加;

区别总结

  1. 默认访问修饰符
    • 类(class)的成员默认是私有的(private)
    • 结构体(struct)的成员默认是公有的(public)
  2. 继承方式
    • 当一个类从另一个类继承时,默认的继承方式是私有继承(private),但通常显式地指定为公有继承(public)、保护继承(protected)或私有继承(private)
    • 结构体不支持继承(在C++中,尽管可以通过某些技巧让结构体看起来像支持继承,但这不是标准用法)
  3. 设计目的
    • 类(class)通常用于封装数据(成员变量)和行为(成员函数),以支持面向对象编程(OOP)的特性,如:封装、继承和多态
    • 结构体(struct)通常用于表示一组数据的集合,这些数据之间可能存在一定的关系,但不一定支持OOP的所有特性 在C++中,结构体也可以具有成员函数和继承特性,但在C语言中,结构体仅用于表示数据的集合
  4. 内存布局
    • 在内存布局上,结构体和类通常是相似的,但具体取决于编译器和类的特定实现(如:是否包含虚函数等)
  5. 语法和语义
    • 从语法上讲,结构体和类在C++中的声明方式非常相似,但它们的语义和用途有所不同
  6. 使用场景
    • 类通常用于设计复杂的、面向对象的系统,其中对象具有明确的状态和行为
    • 结构体通常用于表示简单的数据结构,如:点、矩形、链表节点等
  7. 封装性
    • 类具有更好的封装性,因为它可以隐藏实现细节(通过将成员设置为私有),只暴露必要的公共接口
    • 结构体通常不提供这样的封装性,因为它的成员默认是公有的
  8. 多态性
    • 类支持多态性,这意味着可以通过基类指针或引用来调用派生类的成员函数(如果该函数在基类中被声明为虚函数)
    • 结构体不直接支持多态性,因为它们通常不用于定义类层次结构
  9. 可访问性控制
    • 类可以通过访问修饰符(publicprotectedprivate)来严格控制成员的可访问性
    • 结构体通常只使用public访问修饰符(因为它是默认的),但也可以显式地使用其他访问修饰符



访问修饰符

在C++中,privateprotectedpublic 是三个访问修饰符,用于控制类(class)或结构体(struct)中的成员(包括数据成员和成员函数)的访问权限 这些访问修饰符定义了在类的外部如何与这些成员交互

public(公有的)

  • 如果类的成员被声明为 public,那么它们可以在任何地方被访问
  • 公有成员可以在类的外部直接访问,也可以通过类的对象或指针访问
  • 公有成员通常用于表示类的外部接口,即其他类如何与该类交互

private(私有的)

  • 如果类的成员被声明为 private,那么它们只能在类的内部被访问
  • 私有成员不能通过类的对象或指针从类的外部直接访问
  • 私有成员通常用于隐藏类的内部实现细节,并防止类的用户直接修改类的状态

protected(受保护的)

  • protected 成员在类的内部(包括派生类)可以被访问,但在类的外部(即不是从类直接或间接继承的其他代码)不能直接访问
  • 保护成员通常用于在基类中定义一些可以由派生类访问但不应由类的用户直接访问的成员

示例

class MyClass {  
public:  int publicVar; // 公有数据成员  void publicFunc() { /* ... */ } // 公有成员函数  protected:  int protectedVar; // 受保护数据成员  void protectedFunc() { /* ... */ } // 受保护成员函数  private:  int privateVar; // 私有数据成员  void privateFunc() { /* ... */ } // 私有成员函数  
};  // 访问公有成员  
MyClass obj;  
obj.publicVar = 10;  
obj.publicFunc();  // 下面的行将不会编译,因为它们尝试访问私有和受保护的成员  
// obj.privateVar = 20; // 错误:无法访问私有成员  
// obj.protectedVar = 30; // 错误:无法访问受保护成员  
// obj.privateFunc(); // 错误:无法访问私有成员函数  
// obj.protectedFunc(); // 错误:无法访问受保护成员函数

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

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

相关文章

【应用开发二】GPIO操控(输出、输入、中断)

1 操控GPIO方式 控制目录&#xff1a;/sys/class/gpio /sys/class/gpio目录下文件如下图所示&#xff1a; 1.1 gpiochipX目录 功能&#xff1a;当前SoC所包含的所有GPIO控制器 i.mx6ull一共包含5个GPIO控制器&#xff0c;分别为GPIO1~5分别对应gpiochip0、gpiochip32、gpi…

视频共享融合赋能平台LntonCVS安防监控平台现场方案实现和应用场景

LntonCVS国标视频融合云平台采用端-边-云一体化架构&#xff0c;部署简单灵活&#xff0c;功能多样化。支持多协议&#xff08;GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等&#xff09;和多类型设备接入&#xff08;IPC/NVR/监控平台&#xff09;。主要功能包括视频直…

【2024大语言模型必知】做RAG时为什么要使用滑动窗口?句子窗口检索(Sentence Window Retrieval)是什么?

目录 1. 传统的向量检索方法&#xff0c;使用整个文档检索&#xff0c;为什么不行&#xff1f; 2.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;工作原理 3.句子滑动窗口检索&#xff08;Sentence Window Retrieval&#xff09;的优点 1. 传统的向量检…

区块链的技术架构:节点、网络和数据结构

区块链技术听起来很高大上&#xff0c;但其实它的核心架构并不难理解。今天我们就用一些简单的例子和有趣的比喻&#xff0c;来聊聊区块链的技术架构&#xff1a;节点、网络和数据结构。 节点&#xff1a;区块链的“细胞” 想象一下&#xff0c;区块链就像是一个大型的组织&a…

001 SpringMVC介绍

文章目录 基础概念介绍BS和CS开发架构应用系统三层架构MVC设计模式 SpringMVC介绍SpringMVC是什么SpringMVC与Spring的联系为什么要学习SpringMVC 六大组件介绍六大组件(MVC组件其他三大组件)说明 基础概念介绍 BS和CS开发架构 一种是C/S架构&#xff0c;也就是客户端/服务器…

启动Redis服务器

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、在 Linux 或 macOS 上启动 Redis二、在 Windows 上启动 Redis三、配置 Redis 为服务启动&…

ExVideo: 提升5倍性能-用于视频合成模型的新型后调谐方法

标题&#xff1a;ExVideo: Extending Video Diffusion Models via Parameter-Efficient Post-Tuning作者: Zhongjie Duan; Wenmeng Zhou; Cen Chen; Yaliang Li; Weining QianDOI: 10.48550/arXiv.2406.14130摘要: Recently, advancements in video synthesis have attracted s…

【IJCAI2024】LeMeViT: Efficient Vision Transformer with Learnable Meta Tokens

【IJCAI2024】LeMeViT: Efficient Vision Transformer with Learnable Meta Tokens for Remote Sensing Image Interpretation 论文&#xff1a;https://arxiv.org/abs/2405.09789 代码&#xff1a;https://github.com/ViTAE-Transformer/LeMeViT 由于相邻像素和图像块之间的高…

【2024年更新】ZF关注度指数大合集(包含8类数据)

数据简介&#xff1a;共包含8类数据 1. 地方ZF环境关注度指数&#xff1a;2007-2021 2. 地方ZF数字关注度指数&#xff1a;1999-2021 3. 省级ZF数字关注度指数&#xff1a;2001-2024 4. 农业新质生产力ZF关注度指数&#xff1a;2001-2024 5. 新质生产力ZF关注度指数&#…

c语言入门

c语言入门 C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&#xff0c;可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言&#xff0c;所以说学习C语言是进入编程…

关于怎么将wireshark抓包视频流转为视频播放出来

0.安装wireshark 安装PotPlayer 1.将以下两个插件放入 C:\Program Files\Wireshark\plugins 目录中 2.筛选视频流数据包&#xff0c;右键Decode As… 改为RTP 或者 右键->follow&#xff08;追踪流&#xff09;->UDP stream 然后叉掉弹窗 3.选择菜单Edit->Prefe…

js取数组最大值之Math.max、Math.max.apply

js取数组最大值之Math.max、Math.max.apply Math.maxMath.max.applyapply()第一个参数为什么可以是null 最小值同理 Math.max Math.max(n1,n2,n3,…,nX) 支持传递多个参数&#xff0c;带有较大的值的那个数 Math.max(2,5,3,6,2,4,2,15,9,6,0,1)Math.max.apply apply() 语法&a…

shell编程实战

1.1 shell脚本编程的步骤 需求分析&#xff1a;确定功能 命令测试&#xff1a;确定脚本需要的关键命令 编辑脚本 测试脚本 1.2 操作 1.2.1 实验一 1.需求描述 (1)统计网络中的服务器的mac 注&#xff1a;ARP&#xff0c;地址解析协议 注&#xff1a; (2)检查哪些主机开…

《玫瑰的故事》为何能触动亿万观众的心?

大家最近有看神仙姐姐的新剧嘛? 《玫瑰的故事》作为一部备受瞩目的作品&#xff0c;其影响力不仅在于精彩的剧情和演员们精湛的演技&#xff0c;更在于它所传达的深刻情感和人生哲理。而这部作品之所以能够大爆并引起大批观众的共鸣&#xff0c;背后也有着更多重的原因。 一…

ingress相关yaml文件报错且相关资源一切正常解决方法

今天在执行ingress相关文件的时候莫名其妙报错了&#xff0c;问了别人得知了这个方法 执行ingress相关文件报错 01.yaml是我自己创建关于ingress的yaml文件 报错信息 且相关资源一切正常 解决方法 kubectl get validatingwebhookconfigurations删除ingress-nginx-admissio…

深入探索大模型的魅力:前沿技术、挑战与未来展望

目录 一、大模型的前沿技术 二、大模型面临的挑战 三、大模型的未来展望 四、总结 在当今人工智能领域&#xff0c;大模型不仅是一个热门话题&#xff0c;更是推动技术进步的重要引擎。从深度学习的浪潮中崛起&#xff0c;大模型以其卓越的性能和广泛的应用前景&#xff0c…

快速降低地平线4延迟 极限竞速地平线4延迟严重这样做

极限竞速地平线4全新的开放式剧情设计&#xff0c;让玩家的每一次驾驶都充满了未知与挑战。与此同时&#xff0c;现实世界的玩家也将与玩家一同在这片土地上驰骋。在这里&#xff0c;时间、天气和四季的变化都仿佛触手可及&#xff0c;玩家将亲身体验到真实而震撼的赛车世界。在…

20240624(周一)AH股行情总结:A股低开低走, 恒生科技指数跌2%,贵州茅台转跌为涨

内容提要 A股三大指数收盘均跌超1%&#xff0c;半导体、智慧医疗、商业航天概念领跌&#xff0c;中芯国际跌超3%&#xff0c;盘中一度涨2%。水电股逆势走强&#xff1b;白酒股低开高走&#xff0c;贵州茅台翻红&#xff0c;盘初曾跌3%。微盘股指数大跌4%。 正文 周一&#x…

数据恢复篇:如何在Android上恢复删除的短信

如果您不小心删除了Android设备上的短信并想要检索它们&#xff0c;则可以尝试以下方法&#xff1a; 如何在Android上恢复删除的短信 检查您的备份&#xff1a; 如果您之前备份了Android设备&#xff0c;则可以从备份中恢复已删除的短信。检查您设备的内部存储空间或 Google 云…

Halcon 重叠区域 显示汉字 图像分割

一 如何填充区域之间的GAP或分割重叠区域 read_image(Image,fabrik)*区域生长法将图像分割成相同强度的区域&#xff0c;并将其划分成大小为行*列的矩形。 为了确定两个相邻的矩形是否属于相同的区域&#xff0c; *仅使用其中心点的灰度值。 如果灰度值差小于等于公差&#xff…