第三天|203.移除链表元素 707.设计链表 206.反转链表

news/2026/1/16 20:25:36/文章来源:https://www.cnblogs.com/ounijiangovo/p/19493923

第三天|203.移除链表元素 707.设计链表 206.反转链表

203.移除链表元素

203.移除链表元素 | 代码随想录

手把手带你学会操作链表 | LeetCode:203.移除链表元素_哔哩哔哩_bilibili

笔记

如果没有虚拟头节点,删除操作要分情况,分为头节点和非头节点。

使用虚拟头节点的方法能够让删除/添加操作统一化。

c++需要从内存中释放那个被删除的结点。

使用cur遍历的时候,我们删除的对象一定是cur->next ,因为我们需要删除那个结点的前一个结点地址

返回的时候应该是dummyHead->next ,因为可能头节点已经被删除掉了。

实操出现问题:

newdelete

注意ListNode* dummyHead = new ListNode(0) ,要新开辟内存。

代码/对比

我自己的:

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode* dummyhead=new ListNode(0);//虚拟头节点dummyhead->next=head;auto cur=dummyhead;//从虚拟头节点的下一个结点(原本链表的头节点)开始遍历,也就是说,当前遍历的那个节点是cur->next而不是curwhile(cur->next!=nullptr)//循环条件:处理的那个结点非空{if(cur->next->val==val){cur->next=cur->next->next;}elsecur=cur->next;}return dummyhead->next;}
};

其他:

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作ListNode* cur = dummyHead;while (cur->next != NULL) {if(cur->next->val == val) {ListNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;} else {cur = cur->next;}}head = dummyHead->next;delete dummyHead;return head;}
};

注意删除不必要的节点和虚拟头节点

707.设计链表

帮你把链表操作学个通透!LeetCode:707.设计链表_哔哩哔哩_bilibili

707.设计链表 | 代码随想录

笔记

注意index 的起始位置。

添加node的时候注意先后顺序。

实操出现的问题

循环中修改了_size的大小,注意不要修改类似敏感参数。

代码/对比

我自己的:

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<0||index>(_size-1))//如果index无效{return -1;}LinkedNode* cur=_dummyHead;//cur->next表示当前遍历的值while(index--){cur=cur->next;}return cur->next->val;}void addAtHead(int val) {LinkedNode* node=new LinkedNode(0);//创建一个新的节点node->val=val;node->next=_dummyHead->next;_dummyHead->next=node;_size++;//注意要自增}void addAtTail(int val) {//先找到最后一个节点LinkedNode* cur=_dummyHead;while(cur->next!=nullptr){cur=cur->next;}//此时cur指向最后一个节点//再添加节点LinkedNode* node=new LinkedNode(0);node->next=nullptr;node->val=val;cur->next=node;_size++;}void addAtIndex(int index, int val) {if(index>_size)//如果index无效{return;}if(index==_size)//如果等于长度,则调用addAtTtail{addAtTail(val);return;}if(index<0)//如果小于0则在开头加;{index=0;}//找到indexLinkedNode* cur=_dummyHead;//cur->next表示当前遍历的值while(index--){cur=cur->next;}//插入新的节点LinkedNode* node=new LinkedNode(0);node->val=val;node->next=cur->next;cur->next=node;//size自增_size++;}void deleteAtIndex(int index) {if(index<0||index>_size-1)//如果index无效{return;}//找到indexLinkedNode* cur=_dummyHead;//cur->next是当前遍历的值while(index--){cur=cur->next;}//删除cur->nextLinkedNode* temp=cur->next;cur->next=cur->next->next;delete temp;temp=nullptr;//size自减_size--;}private:int _size;LinkedNode* _dummyHead;
};

206.反转链表

206.反转链表 | 代码随想录

帮你拿下反转链表 | LeetCode:206.反转链表 | 双指针法 | 递归法_哔哩哔哩_bilibili

笔记

双指针法:

一个pre一个cur指针,遍历完全整个链表,对逐个指针翻转指向即可。

注意循环条件为while(cur)而不是while(pre),因为最后需要一个头指针,最后返回的pre就是那个头指针。

递归法:

递归复习:

递归的基本思想是某个函数直接或者间接地调用自身,这样原问题的求解就转换为了许多性质相同但是规模更小的子问题。求解时只需要关注如何把原问题划分成符合条件的子问题,而不需要过分关注这个子问题是如何被解决的。

递归的三个注意点:

1.函数要干什么?

2.递归的停止条件?

3.怎么把大问题转换为小问题?

对于这个问题:

1.函数是为了反转链表,大体逻辑和上边的双指针方法相同;

2.递归的停止条件是while(cur)

3.怎么把大问题转换为小问题:cur指针和pre指针往前移动。

实操出现问题

双指针法:一定要注意循环条件

代码/对比

双指针:

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* pre=nullptr;ListNode* cur=head;while(cur)//直到pre指针为空,停止{ListNode* temp=cur->next;cur->next=pre;pre=cur;cur=temp;}return pre;}
};

递归:

我自己的:

class Solution {
public:ListNode* reverse(ListNode* pre, ListNode* cur){//停止条件:if(cur==nullptr){return pre;}else//怎么把大问题转换为小问题:方向反转、pre和cur指针后移{ListNode* tmp=cur->next;cur->next=pre;pre=cur;cur=tmp;return reverse(pre,cur);}}ListNode* reverseList(ListNode* head) {return reverse(nullptr,head);}
};

随想录上面的:

class Solution {
public:ListNode* reverse(ListNode* pre,ListNode* cur){if(cur == NULL) return pre;ListNode* temp = cur->next;cur->next = pre;// 可以和双指针法的代码进行对比,如下递归的写法,其实就是做了这两步// pre = cur;// cur = temp;return reverse(cur,temp);}ListNode* reverseList(ListNode* head) {// 和双指针法初始化是一样的逻辑// ListNode* cur = head;// ListNode* pre = NULL;return reverse(NULL, head);}};

注意return那块可以直接用cur和tmp;

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

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

相关文章

基于plc1200PLC的四层电梯(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于plc1200PLC的四层电梯(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 论文资料&#xff0c;西门子S7-1200&#xff0c;博途V15(高版本可兼容)&#xff0c;程序、流程图、内容全。需要直接拍&#xff0c;细节私聊

西门子 1200PLC 污水处理系统仿真程序 |||博途 V|||15 及以上可打开(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

西门子 1200PLC 污水处理系统仿真程序 |||博途 V|||15 及以上可打开(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 本商品是西门子 1200PLC 污水处理系统的设计仿真内容&#xff0c;博途 V15 及以上版本轻松打开。无需连接真…

瑜伽馆小程序制作流程,瑜伽馆微信预约系统怎么弄 - 码云数智

低成本搭建瑜伽馆数字化体系:课程预约+会员管理二合一SaaS小程序,既能解决用户线下预约麻烦、课时查询不便的核心痛点,又能帮助场馆打通课程、会员、营收的数字化管理闭环。全程无需技术开发经验,高效搭建、功能齐…

停更三天

嗯,不是摆烂绝对不是,只是这两天要考试了,我也没办法喵;高数,还是挺重要的;本文来自博客园,作者:HexCat,转载请注明原文链接:https://www.cnblogs.com/h3xcat/p/19493907

伪造充电请求免费用电、一次攻击就能让场站直接亏损数万元 - 慧知重卡开源充电桩平台

慧知重卡开源充电桩平台 充电桩防黑客&#xff1a;用OAuth2.0JWT三重防护&#xff0c;守住场站每一分收益 做充电桩场站对接久了就知道&#xff0c;黑客攻击根本不是什么小概率的黑天鹅&#xff0c;就是天天悬在头上的灰犀牛。我们跟几十家场站聊过&#xff0c;黑客的套路…

2025年广州大学程序设计竞赛新生赛

2025年广州大学程序设计竞赛新生赛A 魔法门禁试炼 比较大小,难度一星 #include <iostream> using namespace std; int main() {int a,b,c,d;cin>>a>>b>>c>>d;if(a<d&&b==…

2026优质GEO国际版源码哪家好?跨境适配优选 - 源码云科技

2026优质GEO国际版源码哪家好?跨境适配优选2026年AI营销风口下,GEO优化已然成为企业跨境获客的核心抓手,而优质的GEO优化源码更是决定服务效果与盈利空间的关键。随着AI搜索场景不断拓展,企业对GEO优化系统的全域适…

放假观察记录

放假le 想写点什么,但是又没什么好说的,起码放假了还是挺开心的 先来简单规划一下要补的题吧:新生赛的 \(J\) 和 \(H\) 题 第 \(40\) 次 \(CCF\) \(cacc\) 的 \(T3\) 和 \(T4\) \(cacc\) 的工程题 洛谷上做的一堆杂…

2026年知名的石墨防腐涂料,玻璃鳞片防腐涂料,耐高温防腐涂料厂家选型参考指南 - 品牌鉴赏师

引言在 2026 年,随着工业的快速发展,石墨防腐涂料、玻璃鳞片防腐涂料、耐高温防腐涂料等在众多领域的应用愈发广泛,市场上相关厂家众多,如何选择优质的厂家成为众多用户面临的难题。为了给广大用户提供一个客观、公…

基于西门子plc 博图1200 基于西门子plc的药片自动装瓶(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于西门子plc 博图1200 基于西门子plc的药片自动装瓶(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 机控制系统设计 1.仿真报告&#xff08;1.5W字&#xff09; 2.IO表 3.接线图

基于plc立体车库设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于plc立体车库设计(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 西门子plcs7-1200&#xff0c;带程序仿真、报告&#xff08;过1w&#xff09;、硬件原理图和cad。 功能&#xff1a;地面层七个停车位升降&#xff0c;四个…

【C++】并查集的原理与使用 - 教程

【C++】并查集的原理与使用 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

[特殊字符] 深入理解 Android 输入设备配置:从键盘布局文件到用户体验

作者&#xff1a;你的 Android 老朋友 时间&#xff1a;2026年1月7日 一句话核心&#xff1a;当你按下键盘上的按键时&#xff0c;Android 系统是如何知道该显示什么字符的&#xff1f;本文将带你深入了解这个神奇的过程&#xff01;&#x1f31f; 引言&#xff1a;你是否想过&…

基于cisco的企业网(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于cisco的企业网(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 IP论文 基于cisco的企业网 实物报告 均可ping通

2026年专业的草坪灯,景观灯,景观灯厂家选型决策榜单 - 品牌鉴赏师

引言在 2026 年的当下,随着城市建设的不断推进,专业的草坪灯、景观灯在城市景观打造、照明亮化等方面发挥着愈发重要的作用。为了给广大消费者和相关工程采购方提供科学、公正、客观的景观灯厂家选型参考,我们依据多…

解决本地访问远程桌面端口被拦截

本地访问远程服务器上的服务,访问http:xxx:8080端口不通,解决思路和排查流程如下: 1. 第一步:确认 Java 服务是否真的启动且监听 8080 端口(服务器本地验证) 这是最基础的前提 —— 如果服务没启动 / 监听端口错误,后续排查都无意义。 操作方法(在远程桌面的服务器上…

比话降AI使用教程:手把手教你5分钟把论文AI率降到10%以下

比话降AI使用教程&#xff1a;手把手教你5分钟把论文AI率降到10%以下 TL;DR 比话降AI是专门针对知网AIGC检测系统设计的降AI工具&#xff0c;使用10亿真实论文数据训练&#xff0c;能将AI率稳定降至10%-15%。本教程将从注册、设置到最终降重&#xff0c;一步步教你如何高效使…

世岩清上:以现代化企业展厅为战略支点,赋能企业高质量发展

在数字经济与体验经济深度融合的新时代&#xff0c;企业竞争已从单一的产品性能比拼&#xff0c;转向涵盖品牌认知、用户信任、文化认同与生态协同的系统性较量。在此背景下&#xff0c;传统“陈列式”展厅正加速向现代化、智能化、战略化的企业价值中枢演进。一座精心设计的现…

做一个微信小程序要多少钱?小程序商城制作一个需要多少钱 - 码云数智

小程序制作需要多少钱?全面解析开发方式与避坑指南 随着移动互联网的发展,小程序已成为企业数字化转型的重要工具。然而,很多创业者和中小企业主在初次接触小程序时,最关心的问题就是:“做一款小程序到底要花多少…

2026年可靠的锂电太阳能路灯,市政路灯,led路灯厂家采购推荐指南 - 品牌鉴赏师

引言在城市的发展进程中,路灯作为基础设施的重要组成部分,不仅为人们的出行提供了安全保障,更在一定程度上彰显了城市的文化与形象。随着科技的不断进步,路灯行业也迎来了新的发展机遇与挑战,市场上的路灯厂家众多…