(C++链表01) 移除链表元素

203、移除链表元素

不带头节点

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {while(head != NULL && head->val == val) {ListNode* tem = head;head = head->next;delete tem;}ListNode* cur = head;while(cur != NULL && cur->next != NULL) {if(cur->next->val == val) {ListNode* tem = cur->next;cur->next = tem -> next;delete tem;}else {cur = cur->next; }}return head;}
};

时间复杂度:O(n)

空间复杂度:O(1)

带头节点

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

时间复杂度:O(n)

空间复杂度:O(1)

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 <= -1 || index >= size) {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 != NULL) {cur = cur->next;}cur->next = newNode;size++;}void addAtIndex(int index, int val) {if(index <= -1 || index > size) {return;}size++;if(index == size) {addAtTail(val);return;}LinkedNode* newNode = new LinkedNode(val);LinkedNode* cur = dummyHead;while(index--) {cur = cur->next;}newNode->next = cur->next;cur->next = newNode;}void deleteAtIndex(int index) {if(index <= -1 || index >= size) {return ;}LinkedNode* cur = dummyHead;while(index--) {cur = cur->next;}LinkedNode* tem = cur->next;cur->next = tem->next;delete tem;size--;}private: LinkedNode* dummyHead;int size;
};

206、反转链表

双指针:

用cur指针遍历旧链表,head指针指向新链表的第一个结点,用tem指针取出遍历到的结点,将其指向head作为新链表的第一个节点,更新head。

class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* cur = head;head = NULL;ListNode* tem = NULL;while(cur != NULL) {tem = cur;cur = cur->next;tem-> next = head;head = tem;}return head;}
};

时间复杂度:O(n)

空间复杂度:O(1)

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

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

相关文章

LDA算法进行相似性分析

import gensim from gensim import corpora from gensim.models import LdaModel from gensim.matutils import cossim import nltk from nltk.corpus import stopwords from nltk.tokenize import word_tokenize import string# 如果您尚未下载nltk的停用词列表&#xff0c;请…

使用sklearn的基本流程

scikit-learn&#xff0c;通常简称为 sklearn&#xff0c;是一个开源的Python库&#xff0c;是基于 Python 编程语言的一个非常流行的机器学习库。它建立在 NumPy 和 SciPy 这两个科学计算库之上&#xff0c;并与 Matplotlib 配合使用&#xff0c;为数据预处理、模型训练、评估…

Atom编辑器插件Minimap使用样例

Atom编辑器插件Minimap是一个强大的工具&#xff0c;它为开发者提供了快速、直观的代码预览功能。以下是Minimap的使用样例和一些关键特性的介绍&#xff1a; 1. 安装Minimap 首先&#xff0c;你需要在Atom编辑器中安装Minimap插件。这通常可以通过Atom的插件市场&#xff08…

vue缓存页面,当tab切换时保留原有的查询条件

需求&#xff1a; 切换tab时&#xff0c;查询条件不变 路由页面&#xff1a; 单个页面上加这句话&#xff1a;

bert-base-chinese模型离线使用案例

import torch import torch.nn as nn from transformers import BertModel, BertTokenizer# 通过torch.hub(pytorch中专注于迁移学的工具)获得已经训练好的bert-base-chinese模型 # model torch.hub.load(huggingface/pytorch-transformers, model, bert-base-chinese) model…

超过35岁的网工,你该何去何从?

在网络工程师这个职业中&#xff0c;35岁往往被视为一个重要的门槛&#xff0c;这个年龄段的工程师&#xff0c;既拥有丰富的经验和技能&#xff0c;也面临着职业发展的诸多挑战。 随着技术的飞速发展和年轻一代的不断涌入&#xff0c;不少35岁以上的网工都在迷茫的路口&#x…

雅思词汇7~9

生活类词汇 英文中文fridge冰箱washing machine洗衣机dishwasher洗碗机water heater热水器microwave oven微波驴stereo system音箱radiator电暖炉toaster烤面包机dryer烘干机air conditioner空调accmodation住宿&#xff0c;膳宿tenant租客landlord房东couple夫妇veterinarian…

【资源下载】《数据仓库工具箱》

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 欢迎关注微信公众号&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

SpringBoot报错:The field file exceeds its maximum permitted size of 1048576 bytes

报错信息 The field file exceeds its maximum permitted size of 1048576 bytes原因是 SpringBoot内嵌的 tomcat 默认的所有上传的文件大小为 1MB 解决办法 修改配置 spring:servlet:multipart:max-file-size: 50MBmax-request-size: 50MB或者 spring.servlet.multipart.…

拖地机检测液位的原理-管道液位传感器

在现代洗地机中&#xff0c;确保水箱液位充足是保证清洁效率和质量的关键之一。为了实现这一功能&#xff0c;洗地机通常配备了管道光电液位传感器&#xff0c;这种传感器利用先进的光学感应原理来准确检测水箱中的液位情况。 管道光电液位传感器的工作原理基于光学传感技术&a…

VOS历史话单的非法呼叫话单解决方案,IPSS模块安装到VOS服务器,可大幅度提高安全性!

由于VOS的普及性&#xff0c;不得不承认VOS确实是非常优秀的软交换&#xff0c;但是很多客户在使用过程中都会遇到各种安全问题&#xff0c;比如话费被盗用了&#xff0c;历史话单一堆的非法呼叫话单&#xff0c;严重的影响到了话务安全&#xff0c;并不是那点话费的事了&#…

Flutter【组件】标签

简介 flutter 标签组件。标签组件是一种常见的 UI 元素&#xff0c;用于显示和管理多个标签&#xff08;或标签集合&#xff09;。 github地址&#xff1a; https://github.com/ThinkerJack/jac_uikit pub地址&#xff1a;https://pub.dev/packages/jac_uikit 使用方式&…

中科驭数HADOS 3.0:以四大架构革新,全面拥抱敏捷开发理念,引领DPU应用生态

一家成功的大算力芯片公司&#xff0c;其核心壁垒必须是软硬兼备的&#xff0c;既要有芯片架构的强大技术壁垒&#xff0c;更要有持久投入的、生态兼容完备的软件护城河。HADOS&#xff0c;就是中科驭数的软件护城河。 ——中科驭数高级副总裁 张宇 近日&#xff0c;在DPU基础…

设计模式使用场景实现示例及优缺点(创建型模式——工厂方法模式、抽象工厂模式)

创建型模式 工厂方法模式 (Factory Method Pattern) 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;提供了一个创建对象的接口&#xff0c;但由子类决定要实例化的类是哪一个。工厂方法模式让类的实例化推迟到子类。这样&…

关于MySQL mvcc

innodb mvcc mvcc 多版本并发控制 在RR isolution 情况下 trx在启动的时候就拍了个快照。这个快照是基于整个数据库的。 其实这个快照并不是说拷贝整个数据库。并不是说要拷贝出这100个G的数据。 innodb里面每个trx有一个唯一的trxID 叫做trx id .在trx 开始的时候向innodb系…

嵌入式音频处理技术的现在发展及未来的方向

嵌入式音频处理技术&#xff1a;从音频流媒体到声音识别 嵌入式音频处理技术的迅猛发展正在改变我们的生活方式&#xff0c;从音频流媒体到声音识别&#xff0c;这个领域为人们的生活和工作带来了巨大的影响。本文将探讨嵌入式音频处理技术的最新趋势和应用&#xff0c;以及提…

逻辑回归模型(非回归问题,而是解决二分类问题)

目录&#xff1a; 一、Sigmoid激活函数&#xff1a;二、逻辑回归介绍&#xff1a;三、决策边界四、逻辑回归模型训练过程&#xff1a;1.训练目标&#xff1a;2.梯度下降调整参数&#xff1a; 一、Sigmoid激活函数&#xff1a; Sigmoid函数是构建逻辑回归模型的重要激活函数&am…

openlayers更改点坐标

我现在的需求是无人机点位根据ws传输的经纬度改变位置&#xff0c;在网上查了很多资料&#xff0c;终于是做出来了&#xff0c;如果有问题请指出。 效果图&#xff0c;无人机可以来回移动 这里是核心代码 // 添加飞机点位图层let vectorLayerpointfunction DronepointLayer()…

Mercer 条件的基本概念及证明

Mercer 条件 是核函数理论中的一个重要概念&#xff0c;它确保了一个给定的对称函数可以表示为某个高维特征空间中的内积。这个条件在支持向量机&#xff08;SVM&#xff09;和其他基于核方法的机器学习算法中非常重要。 文章目录 基本介绍Mercer 条件的定义Mercer 定理实际应用…

Kafka(三)Producer第二篇

一&#xff0c;生产者架构 生产者客户端由两个线程协调运行&#xff0c;分别为主线程和Sender线程&#xff08;发送线程&#xff09;。 主线程&#xff1a;KafkaProducer创建消息&#xff0c;通过拦截器、序列化器和分区器之后缓存到消息收集器RecordAccumulator中&#xff1b;…