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/web/33121.shtml

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

相关文章

Java中的反射编程实用指南

Java中的反射编程实用指南 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将深入探讨Java中的反射编程。反射是Java提供的一种强大机制&am…

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装&#xff0c;可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 &#xff08;1&#xff09;通过position属性,可以控制下拉选项的位置 &am…

注塑件检测视觉检测中可能遇到的外观缺陷

机器视觉检测注塑件不良特征有哪些&#xff1f;按照检测需求一般分为两类&#xff1a;外观缺陷和尺寸缺陷。但由于注塑件的工艺特点及原材料特性&#xff0c;注塑件外观缺陷在生产过程中出现的概率于频率远远大于尺寸缺陷。 注塑件检测视觉检测中可能遇到的外观缺陷 1、色差&a…

竞赛选题 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

Vue核心指令解析:探索MVVM与数据操作之美

文章目录 前言一、Vue.js1. MVVM模式介绍2. 单页面组件介绍及案例讲解3. 插值表达式介绍及案例讲解 二、Vue常用指令详解1. 数据绑定指令v-textv-html 2. 条件渲染指令v-ifv-show 3. 列表渲染指令v-for循环数组介绍及案例讲解循环对象介绍及案例讲解 4. 事件监听指令v-on事件修…

Oracle-重启数据库及可能遇到的问题

1、登录到oracle用户 su - oracle2、关闭监听 lsnrctl stop3、杀掉oracle有关进程 #下面两条命令结合成一条 ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {print $2}|xargs kill -9#查询pid ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {print $2}…

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建&#xff0c;可使用此公共筛选组件 使用到的库 npm i antd npm i lodash-es npm i types/lodash-es -D/components/CommonSearch index.tsx import React from react; import { Button, Card, Form } from antd; import styles from ./…

高晓松音频 百度网盘,高晓松音频 百度网盘资源,百度云大全

讲座主要围绕分享了自己的心得和体会&#xff0c;以及对产业现状的深刻洞察。认为&#xff0c;不仅是一种艺术形式&#xff0c;更是一种生活方式。他鼓励年轻人要勇于追求自己的音乐梦想&#xff0c;同时也要关注音乐产业的发展趋势&#xff0c;为音乐产业的繁荣贡献自己的力量…

DDei在线设计器-API-DDeiSheet

DDeiSheet DDeiSheet是代表一个页签&#xff0c;一个页签含有一个DDeiStage用于显示图形。   DDeiSheet实例包含了一个页签的所有数据&#xff0c;在获取后可以通过它访问其他内容。DDeiFile中的sheets属性记录了当前文件的页签列表。 一个DDeiFile实例至少包含一个DDeiSheet…

【人工智能】百度文心一言智能体:AI领域的新里程碑

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

讯飞星火超自然语言合成的完整Demo

依赖文件和功能 requirements.txt 该文件列出了所需的依赖包。 data.py 定义了应用的配置信息&#xff0c;如APPId&#xff0c;APIKey&#xff0c;APISecret等。包含请求数据和请求URL。 main.py 主程序&#xff0c;设置了WebSocket连接&#xff0c;定义了处理消息的各个回调函…

度假酒店新风尚:可视化管理解决方案引领行业变革

在繁忙的都市生活中&#xff0c;度假酒店成了许多人逃离喧嚣、寻找宁静的首选之地。然而&#xff0c;随着旅游业的蓬勃发展&#xff0c;度假酒店面临的挑战也日益增多。如何提升服务质量、确保客人满意度、优化运营效率&#xff0c;成为了摆在各大度假酒店面前的难题。 传统的酒…

小红书商家电话采集软件使用指南

使用小红书商家电话采集软件可以提高商家电话的采集效率&#xff0c;以下是使用指南及附带代码。 步骤一&#xff1a;安装Python和相关库 首先&#xff0c;确保你的电脑已经安装了Python运行环境&#xff08;建议安装Python3版本&#xff09;。安装完成后&#xff0c;同样需要…

《代码整洁之道》精华速览,助你提升代码质量

最近重读了一遍《代码整洁之道》&#xff0c;这本书既是整洁代码的定义&#xff0c;也是写出整洁代码的指南。我认为既适合新手阅读&#xff0c;快速提升代码质量&#xff1b;也适合老鸟阅读&#xff0c;持续精进。本篇将汇总《代码整洁之道》的必读要点&#xff0c;把书读薄&a…

客户端从服务器端获取图片场景,加入CDN的实施方案

场景 浏览器&#xff08;客户端&#xff09;发送获取图片的请求&#xff0c;参数1—指定文件夹&#xff0c;参数2—指定文件夹中的指定图片名称&#xff08;数字编号&#xff09;作为开始&#xff0c;然后web服务器端通过websocket的方式从指定图片开始源源不断的按照顺序依次…

Java中的NIO编程实践精华

Java中的NIO编程实践精华 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java网络编程中&#xff0c;NIO&#xff08;New I/O&#xff09;是一种基于通道和…

人工智能机器学习算法总结偏差和方差

1.定义 在机器学习中&#xff0c;偏差&#xff08;Bias&#xff09;和方差&#xff08;Variance&#xff09;是评估模型泛化能力的重要概念。它们描述了模型在训练数据上的表现以及对新数据的适应能力。 偏差&#xff08;Bias&#xff09; &#xff1a; 偏差是指模型的预测值与…

fetch 封装 文件流下载进度监控-demo

要使用 fetch API 下载文件并监控下载进度&#xff0c;你需要处理响应的 ReadableStream。这里是一个如何封装此功能的基本示例&#xff1a; <script setup lang"ts"> const downloadFileWithProgress async (url, onProgress) > {// 发起 fetch 请求cons…

北斗三号短报文通信终端 | 助力户外无网络场景作业

北斗三号短报文通信终端是一款专为户外无网络场景作业设计的先进通信工具&#xff0c;它依托于中国自主研发的北斗卫星导航系统&#xff0c;为用户在偏远地区或无网络覆盖区域提供了可靠的通信保障。以下是关于北斗三号短报文通信终端的详细介绍&#xff1a; 一、功能特点 北斗…

【Linux系列】tree 命令的实用指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…