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

第二章 链表

目录

  • 一、移除链表元素
  • 二、设计链表
  • 三、反转链表
  • 四、两两交换链表中的节点
  • 五、删除链表倒数第N个节点
  • 六、链表相交
  • 七、环形链表Ⅱ

一、移除链表元素

Leetcode 203

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* cur = dummyHead;while (cur->next != nullptr) {if (cur->next->val == val) {ListNode* tmp = cur->next;cur->next = tmp->next;delete tmp;} else cur = cur->next;}head = dummyHead->next;delete dummyHead;return head;}
};

二、设计链表

Leetcode 707

class MyLinkedList {
public:struct LinkedNode {int val;LinkedNode* next;LinkedNode(int val): val(val), next(nullptr) {}};MyLinkedList() {_dummyHead = new LinkedNode(0);_size = 0;}int get(int index) {if (index > (_size - 1) || index < 0) return -1;LinkedNode* cur = _dummyHead->next;while (index -- ) cur = cur->next;return cur->val;}void addAtHead(int val) {LinkedNode* newNode = new LinkedNode(val);newNode->next = _dummyHead->next;_dummyHead->next = newNode;_size ++ ;}void addAtTail(int val) {LinkedNode* newNode = new LinkedNode(val);LinkedNode* cur = _dummyHead;while (cur->next != nullptr) cur = cur->next;cur->next = newNode;newNode->next = nullptr;_size ++ ;}void addAtIndex(int index, int val) {if (index > _size) return;if (index < 0) index = 0;LinkedNode* newNode = new LinkedNode(val);LinkedNode* cur = _dummyHead;while (index -- ) cur = cur->next;newNode->next = cur->next;cur->next = newNode;_size ++ ;}void deleteAtIndex(int index) {if (index >= _size || index < 0) return;LinkedNode* cur = _dummyHead;while (index -- ) cur = cur->next;LinkedNode* tmp = cur->next;cur->next = tmp->next;delete(tmp);_size -- ;}private:int _size;LinkedNode* _dummyHead;
};

三、反转链表

Leetcode 206

双指针法:

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode *tmp, *cur = head, *pre = nullptr;while (cur) {tmp = cur->next;cur->next = pre;pre = cur, cur = tmp;}return pre;}
};

递归法:

class Solution {
public:ListNode* reverse(ListNode* pre, ListNode* cur) {if (cur == nullptr) return pre;ListNode* tmp = cur->next;cur->next = pre;return reverse(cur, tmp);}ListNode* reverseList(ListNode* head) {return reverse(nullptr, head);}
};

头插法:

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* dummy = new ListNode(-1);dummy->next = nullptr;ListNode* cur = head;while (cur != nullptr) {ListNode* tmp = cur->next;cur->next = dummy->next;dummy->next = cur;cur = tmp;}return dummy->next;}
};

使用栈来反转链表:

class Solution {
public:ListNode* reverseList(ListNode* head) {if (head == nullptr) return nullptr;if (head->next == nullptr) return head;stack<ListNode*> stk;ListNode* cur = head;while (cur != nullptr) stk.push(cur), cur = cur->next;ListNode* dummy = new ListNode(-1);cur = dummy;while (!stk.empty()) {ListNode *node = stk.top(); stk.pop();cur->next = node;cur = cur->next;}cur->next = nullptr;return dummy->next;}
};

四、两两交换链表中的节点

Leetcode 24

class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummy = new ListNode(-1);dummy->next = head;ListNode* cur = dummy;while (cur->next != nullptr && cur->next->next != nullptr) {ListNode* tmp = cur->next->next->next;ListNode* tmp1 = cur->next;cur->next = cur->next->next;cur->next->next = tmp1;cur->next->next->next = tmp;cur = cur->next->next;}return dummy->next;}
};

五、删除链表倒数第N个节点

Leetcode 19

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy = new ListNode(-1);dummy->next = head;ListNode *slow = dummy, *fast = dummy;while (n -- && fast != nullptr) fast = fast->next;fast = fast->next; // fast 多走一步,last少走一步到被删除节点的前一个节点,方便删除while (fast != nullptr) fast = fast->next, slow = slow->next;ListNode* tmp = slow->next;slow->next = tmp->next;delete(tmp);return dummy->next;}
};

六、链表相交

面试题 02.07

双指针:

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;}
};

先统计两个链表长度,再将较长链表先遍历到两个链表能尾部对其的位置,再开始遍历。

class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode *curA = headA, *curB = headB;int lenA = 0, lenB = 0;while (curA != nullptr) curA = curA->next, lenA ++ ;while (curB != nullptr) curB = curB->next, lenB ++ ;curA = headA, curB = headB;if (lenB > lenA) swap(lenA, lenB), swap(curA, curB);int gap = lenA - lenB;while (gap -- ) curA = curA->next;while (curA != nullptr) {if (curA == curB) return curA;curA = curA->next;curB = curB->next;}return nullptr;}
};

七、环形链表Ⅱ

Leetcode 142

参考题解

class Solution {
public:ListNode *detectCycle(ListNode *head) {ListNode *fast = head, *slow = head;while (fast != nullptr && fast->next != nullptr) {fast = fast->next->next;slow = slow->next;if (fast == slow) {ListNode *p1 = fast, *p2 = head;while (p1 != p2) p1 = p1->next, p2 = p2->next;return p1;}}return nullptr;}
};

相关文章:

第二章 链表

目录 一、移除链表元素二、设计链表三、反转链表四、两两交换链表中的节点五、删除链表倒数第N个节点六、链表相交七、环形链表Ⅱ 一、移除链表元素 Leetcode 203 class Solution { public:ListNode* removeElements(ListNode* head, int val) {ListNode* dummyHead new Lis…...

Spring Security OAuth2实现单点登录:简化多个系统之间的登录流程

Spring Security OAuth2实现单点登录&#xff1a;简化多个系统之间的登录流程 一、介绍OAuth21. OAuth2的定义和作用2. OAuth2的优点和使用场景 二、Spring Security1. Spring Security的介绍2. Spring Security的特点和优势 三、OAuth2与Spring Security的结合1. OAuth2在Spri…...

语义分析器

语义分析器&#xff08;Semantic Analyzer&#xff09;是编译器中的一个重要组成部分&#xff0c;它负责对源代码进行语义分析&#xff0c;检查源代码是否符合语义规范&#xff0c;并进行错误处理和类型推导等操作。 举个例子&#xff0c;假设有以下的源代码&#xff1a; int…...

爬虫基本原理

爬虫基本原理 1.1获取网页1.1.1提取信息1.1.2保存数据 1.2请求1.2.1 请求方法1.2.2 请求网址1.2.3 请求头1.2.4请求体1.3响应 1.1获取网页 爬虫首先要做的工作就是获取网页&#xff0c;这里就是获取网页的源代码。源代码里包含了网页的部分有用信息&#xff0c;所以只要把源代…...

常见电子元器件和电路

目录 常见电子元器件一览表(字母标志)NTC(负温度系数热敏电阻)压敏电阻X2电容(抑制电源电磁干扰用电容器)泄放电阻共模电压共模电感整流桥滤波电容RCD吸收二极管Y电容整流器的原理输出整流肖特基二极管 功率晶体管&#xff08;GTR&#xff0c;三极管)双极型晶体管(BJT&#xff…...

English Learning - L3 Lesson1 VOA-Color 译文

听碎 VOA NOW, THE VOA SPECIAL ENGLISH PROGRAM WORDS AND THEIR STORIES Every people has its own way of saying things, its own special expressions. Many everyday American expressions are based on colors. 各国人民都有自己说话的方式&#xff0c;有自己独特的表…...

如何在linux中配置JDK环境变量

在linux系统部署皕杰报表&#xff0c;因皕杰报表是一款纯java报表工具&#xff0c;运行时需要jre环境&#xff0c;所以要在服务器上配置三个jdk环境变量path、classpath、JAVA_HOME。 那么为什么要配置jdk环境变量呢&#xff1f;因为java软件运行时要用到一些java命令&#xff…...

横截面收益率(二) 阿尔法策略是如何构建的

资本资产定价模型自从首次被提出以来在金融经济学中一直处于中心地位。 在一系列简化假定条件下&#xff0c;资本资产定价模型表明&#xff0c;任何证券的收益率与该证券 的系统性风险&#xff08;或者贝塔值&#xff09;呈线性关系。因此&#xff0c;依据资本资产定价模型横截…...

【ConfluxNews】2023.5.15 警惕任何未经合约审计的项目

1.【网络状态】当前版本V2.2.3&#xff0c;全网算力≈8T&#xff0c;昨日交易次数20K&#xff0c;昨日新增账户0.17K&#xff0c;昨日新增合约0个&#xff1b; 2.【POS参数】总锁仓275M&#xff0c;节点总数284&#xff0c;年利率13.7%&#xff08;理论计算&#xff09;&#x…...

MySQL学习---17、MySQL8其它新特性

1、MySQL新增特性 1.1 更简便的NoSQL支持 NoSQL泛指非关系型数据库和数据存储。随着互联网平台的规模飞速发展&#xff0c;传统的关系型数据库已经越来越不能瞒住需求。从5.6版本开始&#xff0c;MySQL就开始支持简单的NoSQL存储功能。MySQL 8对这一功能做了优化&#xff0c;…...

快速入门matlab——变量练习

学习目标&#xff1a;1.掌握matlab编程中最常用的几种变量类型 2.对变量类型的属性有所熟悉&#xff0c;不要求记忆&#xff0c;知道了解即可 3.要求熟练运用这几种变量类型创建自己的变量 clear all; % 清除Workspace中的所有…...

c++ 11标准模板(STL) std::set(三)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…...

ChatGPT详细介绍

ChatGPT: 自然语言处理的强大工具 ChatGPT是一种基于人工智能的自然语言处理模型&#xff0c;它是由OpenAI开发的一款先进的语言模型。ChatGPT基于GPT-3.5架构&#xff0c;具有强大的语言生成和理解能力。它被设计用于与人类进行自然对话&#xff0c;并提供广泛的应用场景。 …...

【算法】【算法杂谈】让[0,x)区间上的出现概率变为x^k

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…...

【2023华为OD笔试必会25题--C语言版】《21 对称美学》——字符串、递归

本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…...

为减少来自环境使用的无线传感器网络的传输次数而开发的方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 随着无线传感器网络(Wireless Sensor Network,WSN)的广泛应用,业界开始应用环境能量收集技术解决传感器节点的能量补充问题。而…...

springboot+vue滴答拍摄影项目(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的滴答拍摄影项目。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌…...

SQL基础培训13-索引和优化

进度13-索引和优化-SQL基础培训 知识点: 你可以把索引理解为一种特殊的目录。索引分聚集索引(clustered index,也称聚类索引、簇集索引) 和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。 1、聚集索引 以汉语字典举例,汉语字典有部首目录和检字表,还…...

拥抱5G发展机遇,从边缘计算上车

随着5G技术的逐渐普及和应用&#xff0c;边缘计算成为了当前信息技术领域的热门话题。边缘计算是指将计算和数据存储移动到网络的边缘&#xff0c;即源站以外的网络设备。与云计算相比&#xff0c;边缘计算更加贴近数据生成和处理的实时应用场景&#xff0c;具有更高的性能和更…...

“前端”工匠系列(二):合格的工匠,怎么做好价值落地 | 京东云技术团队

一、“技术鄙视链&#xff1f;” 如果你是一个技术人&#xff0c;相信都知道技术圈有个相互的鄙视链&#xff0c;这个链条从技术人自己认知的角度在以业务价值为中心嵌套的一层一层的环&#xff0c;就像洋葱&#xff0c;具体的描述这里不赘述了。 出门左拐随便抓住一个人问一…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...