代码随想录-DAY③-链表——leetcode 203 | 707 | 206

203

思路

设置一个虚拟头结点,这样所有节点就都可以按照统一的方式进行移除。
如果下一个节点的值等于 val,让节点 next 指针直接指向下下一个节点。
不要忘记清理节点内存。

时间复杂度: O(n)
空间复杂度: O(1)

代码
/*** 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* removeElements(ListNode* head, int val) {ListNode* dumphead = new ListNode(0, head);ListNode* pre = dumphead;while(pre->next != nullptr){if(pre->next->val == val){ListNode* tmp = pre->next;pre->next = pre->next->next;delete tmp;}else{pre = pre->next;}}head = dumphead->next;delete dumphead;return head;}
};

707

思路

addAtHead(val) 和 addAtTail(val) 可以借助 addAtIndex(index, val) 来实现
根据题意,优先判断 index 的有效性
使用虚拟头结点和变量size记录节点数

时间复杂度:get O(index),addAtHead O(1),addAtTail O(n),addAtIndex O(index),deleteAtIndex O(index)
空间复杂度:单函数 O(1),总体 O(n)

代码
class MyLinkedList {
public:MyLinkedList() {dummyhead = new ListNode(0);size = 0;}int get(int index) {ListNode* getnode = dummyhead;if(index<0 || index>=size){return -1;}for(int i=0; i<=index; i++){getnode = getnode->next;}return getnode->val;}void addAtHead(int val) {return addAtIndex(0, val);}void addAtTail(int val) {return addAtIndex(size, val);}void addAtIndex(int index, int val) {ListNode* node = dummyhead;if(index>size){return;}index = max(0,index);for(int i=0; i<index; i++){node = node->next;}ListNode* newnode = new ListNode(val);newnode->next = node->next;node->next = newnode;size++;}void deleteAtIndex(int index) {ListNode* node = dummyhead;if(index<0 || index>=size){return;}for(int i=0; i<index; i++){node = node->next;}ListNode* tmp = node->next;node->next = node->next->next;delete tmp;size--;}private:ListNode* dummyhead;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);*/

206

思路

在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

时间复杂度: O(n)
空间复杂度: O(1)

代码
/*** 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) {ListNode *pre = nullptr, *cur = head, *temp;while(cur != nullptr){temp = cur->next;cur->next = pre;pre = cur;cur = temp;}return pre;}
};

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

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

相关文章

ts-01.泛型(函数和接口)

泛型 泛的意思是:漂浮, 比如泛舟; 泛型: 类型漂浮未定 > 动态类型. 用于: 函数 接口 类 T extends string | number 泛型约束 function a<T any, K> (: number, value: T) { // 泛型参数设置默认值anyconst arr Array<T>(l).fill(value) // [foo, foo, foo] }…

数据赋能(140)——开发:数据合并——影响因素、直接作用、主要特征

影响因素 数据合并过程中需要考虑的一些影响因素&#xff1a; 数据源的多样性和复杂性&#xff1a; 数据可能来自不同的系统、数据库、文件或API&#xff0c;这些数据源可能具有不同的结构、格式和命名规范。数据源之间可能存在差异&#xff0c;如数据缺失、不一致或冗余&…

论文研读|AI生成图像检测发展历程及研究现状

前言&#xff1a;本篇博客系统性梳理AI生成图像检测的研究工作。 「人工智能生成图像检测」研究及发展现状介绍 参考资料 https://fdmas.github.io/AIGCDetect/针对AIGC检测的鲁棒性测试——常见攻击手段汇总论文研读&#xff5c;以真实图像为参考依据的AIGC检测论文研读&…

实验五 图像增强—空域滤波

一、实验目的 了解图像平滑滤波器&#xff08;均值滤波和中值滤波&#xff09;和图像锐化算子&#xff08;Sobel算子、Prewitt算子、Laplacian算子&#xff09;在工程领域中的应用&#xff1b;理解图像平滑滤波器和图像锐化算子的工程应用范围&#xff1b;掌握图像平滑滤波器和…

Netty学习(Netty入门)

概述 Netty是什么 Netty的地位 Netty的优势 HelloWorld public class HelloClient {public static void main(String[] args) throws InterruptedException {// 1. 启动类new Bootstrap()// 2. 添加 EventLoop.group(new NioEventLoopGroup())// 3. 选择客户端 channel 实现.…

如何恢复未保存的 Excel 文件

您是否曾经在处理 Excel 工作表时&#xff0c;电脑突然崩溃&#xff1f;您首先想到的是“进度保存了吗&#xff1f;”或“我是否按了 CtrlS 来保存文件&#xff1f;”这种压力是难以想象的&#xff0c;因为意外断电或电脑崩溃可能会让您所有的辛苦工作付诸东流。 无论对于学生…

前端技术(三)—— javasctipt 介绍:jQuery方法和点击事件介绍(补充)

6. 常用方法 ● addClass() 为jQuery对象添加一个或多个class <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

Educational Codeforces Round 167 (Rated for Div. 2)(A~C)题解

A. Catch the Coin 解题思路: 最终&#x1d465;一定会相等&#xff0c;我们考虑直接到下面接住他。 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000005 ll dp[N], w[N], v[N], h[N]; ll dis[1005][1005]; ll a, b, c, n, m, t; ll…

反编译kasada

继续研究反编译 这次的网站是 一个航司网站 他有 akamai和 kasada 两种防护 akamai 没啥好说的 结构分析 最开始有个长字符串 处理成 一个十几万的数组 通过 r.W[0] 走什么分支 还有数据的存取 M是一个98个函数组成的数组 代表不同的执行逻辑 这里给他转成了 switch case…

pygame 音乐粒子特效

代码 import pygame import numpy as np import pymunk from pymunk import Vec2d import random import librosa import pydub# 初始化pygame pygame.init()# 创建屏幕 screen pygame.display.set_mode((1920*2-10, 1080*2-10)) clock pygame.time.Clock()# 加载音乐文件 a…

RAID的实现

软RAID&#xff0c;在实际工作中使用较少&#xff0c;性能太次。 mdadm工具&#xff0c;主要在虚拟机上使用&#xff0c; 硬RAID 用一个单独的芯片&#xff0c;这个芯片的名字叫做RAID卡&#xff0c;数据在RAID中进行分散的时候&#xff0c;用的就是RAID卡。 模拟RAID-5工作…

麦蕊智数,,另外一个提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。

麦蕊智数&#xff0c;&#xff0c;提供免费的股票数据API&#xff0c;可以通过其提供的接口获取实时和历史的股票数据。 API接口&#xff1a;http://api.mairui.club/hslt/new/您的licence 备用接口&#xff1a;http://api1.mairui.club/hslt/new/您的licence 请求频率&#x…

element-plus的文件上传组件el-upload

el-upload组件 支持多种风格&#xff0c;如文件列表&#xff0c;图片&#xff0c;图片卡片&#xff0c;支持多种事件&#xff0c;预览&#xff0c;删除&#xff0c;上传成功&#xff0c;上传中等钩子。 file-list&#xff1a;上传的文件集合&#xff0c;一定要用v-model:file-…

stm32按键检测+光敏+蜂鸣器

按键检测 按键注意消抖&#xff0c;机械按下和松开时均伴随有一连串的抖动&#xff0c;一般为5ms&#xff5e;10ms。可通过软件或硬件消抖。 void Key_Init() {//开启时钟,GPIOBRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//定义结构体变量GPIO_InitTypeDef GPIO_…

080、类与类之间的关系

类与类之间主要存在以下几种关系&#xff1a; 继承&#xff08;Inheritance&#xff09;&#xff1a; 继承是面向对象编程的一个基本特征&#xff0c;它允许我们定义一个类&#xff08;子类或派生类&#xff09;来继承另一个类&#xff08;父类或基类&#xff09;的属性和方法…

孟德尔随机化与痛风3

写在前面 检索检索&#xff0c;刚好发现一篇分区还挺高&#xff0c;但结果内容看上去还挺熟悉的文章&#xff0c;特记录一下。 文章 Exploring the mechanism underlying hyperuricemia using comprehensive research on multi-omics Sci Rep IF:3.8中科院分区:2区 综合性期…

刷题——重建二叉树

重建二叉树_牛客题霸_牛客网 TreeNode* reConstructBinaryTree(vector<int>& preOrder, vector<int>& vinOrder) {// write code hereint n preOrder.size();int m vinOrder.size();if(n 0 || m 0) return NULL;TreeNode* root new TreeNode(preOrde…

【排序算法】—— 快速排序

快速排序的原理是交换排序&#xff0c;其中qsort函数用的排序原理就是快速排序&#xff0c;它是一种效率较高的不稳定函数&#xff0c;时间复杂度为O(N*longN)&#xff0c;接下来就来学习一下快速排序。 一、快速排序思路 1.整体思路 以升序排序为例&#xff1a; (1)、首先随…

web缓存代理服务器

一、web缓存代理 web代理的工作机制 代理服务器是一个位于客户端和原始&#xff08;资源&#xff09;服务器之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理服务器发送一个请求&#xff0c;并指定目标原始服务器&#xff0c;然后代理服务器向原始…

启动外部EXE参数

QString rootDir1 QApplication::applicationDirPath(); QString filePathExe1 QString(“%1/run/xxx.exe”).arg(rootDir1); QString fileConfigPath1 QString(“%1/run/”).arg(rootDir1); std::string stdStr filePathExe1.toStdString(); LPCSTR lpcStr stdStr.c_str(…