Leetcode 203 删除链表节点
感觉使用虚拟头节点方便理解,如果不使用虚拟头节点需要单独写一段处理头节点的代码
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;}
};
Leetcode 707设计链表
class MyLinkedList {
public:struct LinkNode{LinkNode*prev;LinkNode*next;int val_;LinkNode(int val):val_(val),prev(nullptr),next(nullptr){};};MyLinkedList() {dummyHead=new LinkNode(0);dummyTail=new LinkNode(0);size_=0;dummyHead->next=dummyTail;dummyTail->prev=dummyHead;}int get(int index) {if(index>=size_||index<0)return -1;int num;LinkNode*cur=dummyHead;for(int i=0;i<index;++i){cur=cur->next;}num=cur->next->val_;delete cur;return num;}void addAtHead(int val) {LinkNode*newNode=new LinkNode(val);LinkNode*temp=new LinkNode(0);temp->next=dummyHead->next;dummyHead->next=newNode;newNode->prev=dummyHead;newNode->next=temp->next;temp->next->prev=newNode;size_++;delete temp;}void addAtTail(int val) {LinkNode*newNode=new LinkNode(val);LinkNode*temp=new LinkNode(0);temp->prev=dummyTail->prev;dummyTail->prev=newNode;newNode->next=dummyTail;newNode->prev=temp->prev;temp->prev->next=newNode;size_++;delete temp;}void addAtIndex(int index, int val) {if(index==0){addAtHead(val);return ;}if(index==size_){addAtTail(val);return;}if(index>size_){return;}LinkNode*cur=dummyHead;LinkNode*newNode=new LinkNode(val);LinkNode*temp=new LinkNode(0);for(int i=0;i<index;i++){cur=cur->next;}temp->next=cur->next;cur->next=newNode;newNode->prev=cur;newNode->next=temp->next;temp->next->prev=newNode;size_++;delete temp;}void deleteAtIndex(int index) {if(index>=size_||index<0)return;LinkNode*cur=dummyHead;LinkNode*temp=new LinkNode(0);for(int i=0;i<index;i++){cur=cur->next;}temp->next=cur->next->next;cur->next=cur->next->next;temp->next->prev=cur;size_-=1;delete temp->next;delete temp;}private:LinkNode*dummyHead;LinkNode*dummyTail;int size_;
};/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList* obj = new MyLinkedList();* int param_1 = obj->get(index);* obj->addAtHead(val);* obj->addAtTail(val);* obj->addAtIndex(index,val);* obj->deleteAtIndex(index);*/
如上面所示代码,有问题,但是看不出来哪有问题。随后按照代码随想录的思路进行编写,其中最需要注意的位置是get、addAtIndex、deleteAtIndex中的循环条件,其中get需要cur正好位于index,而add、delete需要cur位于index位置的前一个或者后一个,这道题需要多练几遍。
class MyLinkedList {
public:struct LinkNode{LinkNode* prev;LinkNode* next;int val_;LinkNode(int val) :val_(val), prev(nullptr), next(nullptr) {};};MyLinkedList() {sentinelNode = new LinkNode(0);size_ = 0;sentinelNode->next = sentinelNode;sentinelNode->prev = sentinelNode;}int get(int index) {if (index >= size_ || index < 0)return -1;int num;LinkNode* cur = sentinelNode;int mid = size_ >> 1;if (index < mid){for (int i = 0; i < index -1; i++){cur = cur->next;}}else {for (int i = 0; i < size_ - index; i++){cur = cur->prev;}}num = cur->val_;return num;}void addAtHead(int val) {LinkNode* newNode = new LinkNode(val);LinkNode* temp = sentinelNode->next;newNode->prev = sentinelNode;newNode->next = sentinelNode->next;sentinelNode->next = newNode;temp->prev = newNode;size_++;}void addAtTail(int val) {LinkNode* newNode = new LinkNode(val);LinkNode* temp;temp = sentinelNode->prev;newNode->next = sentinelNode;newNode->prev = temp;sentinelNode->prev = newNode;temp->next = newNode;size_++;}void addAtIndex(int index, int val) {if (index == 0){addAtHead(val);return;}if (index > size_){return;}int mid = size_ >> 1;LinkNode* cur = sentinelNode;LinkNode* newNode = new LinkNode(val);if (index < mid){for (int i = 0; i < index; i++){cur = cur->next;}LinkNode* temp = cur->next;cur->next = newNode;temp->prev = newNode;newNode->next = temp;newNode->prev = cur;size_++;}else{for (int i = 0; i < size_ - index ; ++i){cur = cur->prev;}LinkNode* temp = cur->prev;cur->prev = newNode;temp->next = newNode;newNode->prev = temp;newNode->next = cur;size_++;}}void deleteAtIndex(int index) {if (index >= size_ || index < 0)return;int mid = size_ >> 1;LinkNode* cur = sentinelNode;if (index < mid){for (int i = 0; i < index; ++i){cur = cur->next;}LinkNode* temp = cur->next->next;cur->next = temp;temp->prev = cur;size_--;}else {for (int i = 0; i < size_ - index - 1; ++i){cur = cur->prev;}LinkNode* temp = cur->prev->prev;cur->prev = temp;temp->next = cur;size_--;}}private:LinkNode* sentinelNode;int size_;
};
Leetcode 206
单向链表反转,之前没接触过,应该说单向链表都没怎么接触过,对于我眼前一亮的地方在于
ListNode*pre=nullptr;
这样cur->next直接=pre即可把尾节点next赋值为nullptr
判断条件为cur,当cur为nullptr时pre正好成为新的head
通过画图可以很好理解
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode*cur=head;ListNode*prev=nullptr;while(cur){ListNode*temp=cur->next;cur->next=prev;prev=cur;cur=temp;}return prev;}
};
很少写链表,更别说设计链表了,画图画了半天有点懵,中间边界条件判断很难看出来错误,还是需要多写,下周需要复习这一部分内容,通过画图能够更加直观了解问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1174711.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
无感BLDC控制:反电动势滤波实战
目录
一、核心原理:无传感器 BLDC 与反电动势检测
1. BLDC 无传感器控制的核心逻辑
2. 反电动势获取方式
3. 关键滤波需求
二、反电动势常用滤波方法(硬件 软件)
1. 硬件滤波(前置处理)
2. 软件滤波࿰…
2026滤芯市场新动向:哪些滤芯工厂值得选?进口MBR平板膜/0.5um滤芯/新能源行业树脂,滤芯厂商哪家好 - 品牌推荐师
随着环保政策持续收紧与工业用水需求升级,滤芯作为水处理与废气治理的核心耗材,其品质与供应链稳定性直接影响项目合规性与运行成本。据行业统计,2025年国内滤芯市场规模突破120亿元,年复合增长率达8.7%,但市场集…
大数据领域分布式计算的性能优化策略
大数据分布式计算性能优化:从“堵车”到“通途”的系统调校指南
关键词
分布式计算、性能优化、数据本地化、资源调度、Shuffle优化、并行度调整、容错机制
摘要
当你用分布式集群处理100TB日志时,有没有遇到过这样的场景:任务卡了6小时还没跑…
Product Trick
Cookie Distribution
模拟赛出了 Product Trick,来学一下。
考虑到 \(\prod c_i\) 等于从 \(n\) 个孩子每人手中选出一个饼干的方案数。
设状态 \(f_{i,j}\) 表示前 \(i\) 天,有 \(j\) 个孩子已经得到了最终被选出的…
交易平台如何优化合约交易体验WEEX一种交互与机制设计的行业观察
在数字资产交易领域,合约交易因其高波动性,对交易体验与风险管理提出了更高要求。近年来,一些交易平台开始从产品设计角度入手,尝试通过界面与机制调整,降低操作复杂度,提高交易过程中的可控性。从公开资料…
AI销冠系统是什么?数字员工在提升企业效率中的关键作用是什么?
数字员工的引入使企业在优化业务流程、降低成本和提升效率方面取得显著成效。通过AI销冠系统,这些数字员工可以快速执行大规模外呼任务,负责与客户进行有效沟通。这种自动化的操作不仅大幅减少了人工座席的需求,还降低了招聘和培训相关的开支…
题解:P14973 『GTOI - 2D』木棍
题意
对于 \(01\) 串 \(S\),我们不断删除 \(S\) 中的 \(\texttt{01}\) 子串,直至 \(S\) 中不含 \(\texttt{01}\) 子串,最终得到的串设为 \(f(S)\)。定义 \(V(S)=\sum\limits_{|T|=|S|}[f(S)=f(T)]\)。
给定长度为 \…
【多式联运】不确定需求下考虑混合时间窗的多式联运路径优化附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…
Agent设计模式学习(基于langchain4j实现)(5) - 条件工作流
书接上回,简历评估完后,根据评估结果,如果合格,公司就该通知面试,否则回邮件拒绝。也就是今天要演示的“条件工作流”。下面定义这2个分支对应的Agent:
一、定义不同分支的Agent
1.1 EmailAssistant (发邮件拒绝候…
家长必知:孩子日常如何有效预防近视
近年来,儿童青少年近视发生率呈逐年攀升且低龄化的趋势,近视问题已成为影响孩子身心健康的重要公共卫生议题。对于家长而言,掌握科学有效的近视预防方法,帮助孩子建立良好的用眼习惯,是守护孩子清晰视界的关键。近视的…
学长亲荐9个一键生成论文工具,自考毕业论文轻松搞定!
学长亲荐9个一键生成论文工具,自考毕业论文轻松搞定!
AI 工具让论文写作不再难
对于自考学生来说,撰写毕业论文是一项既重要又充满挑战的任务。在时间紧张、资料繁杂的情况下,如何高效完成一篇符合要求的论文,成为许多…
深入解析:斯坦福CS520知识图谱课程深度解析:从理论基础到工业应用的前沿指南[附中英文 PPT]
深入解析:斯坦福CS520知识图谱课程深度解析:从理论基础到工业应用的前沿指南[附中英文 PPT]pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…
SEO 和 SEM 到底差在哪?—— 用最土的大白话给你拆明白
SEO 和 SEM 到底差在哪?—— 用最土的大白话给你拆明白SEO 和 SEM 到底差在哪?—— 用最土的大白话给你拆明白咱先把话放这儿:流量就是命,没流量你连展示的机会都没有为啥 2026 了还唠这俩?AI 都把文案写了,…
【动态多目标优化】进化动态约束多目标优化测试集DCP1-DCP9的TruePF研究附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…
ssm数学辅导微信小程序毕业论文+PPT(附源代码+演示视频)
文章目录一、项目简介1.1 运行视频1.2 🚀 项目技术栈1.3 ✅ 环境要求说明1.4 包含的文件列表数据库结构与测试用例系统功能结构前台运行截图后台运行截图项目部署源码下载一、项目简介
项目基于微信小程序,使用微信原生开发框架或uni-app框架开发。《ss…
【独家创新】基于ASL-QPSO-LSTM-AdaBoost的时间序列预测模型研究附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…
【多传感器融合】在电力系统中针对网络入侵的多源数据融合附Python代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…
高级人工智能期末复习(一)—— 搜索
搜索评价一个搜索算法,从四个维度进行——完备性、最优性、空间复杂度、时间复杂度完备性:只要问题有解,算法能不能一定找到?(比如找钥匙,能不能保证找到,不管钥匙藏在哪)最优性&…
提示工程架构师揭秘:Agentic AI在智能制造中的3大技术壁垒与突破方案
Agentic AI走进智能制造:提示工程架构师拆解3大技术壁垒与突破路径
引言:从凌晨3点的产线故障说起——Agentic AI的Promise与落地之痛
凌晨3点,某汽车厂总装线的红灯突然亮起。传感器显示第5工位机械臂的振动值飙升至12mm/s(阈值8…