删除链表的倒数第 N 个结点

LeetCode 19. 删除链表的倒数第 N 个结点

/*** 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* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy = new ListNode(-1);dummy->next = head;ListNode *p = dummy , *q = dummy;while(n--)  p = p->next;while(p->next){p = p->next;q = q->next;}q->next = q->next->next;return dummy->next;}
};

关键

  • 创建一个虚拟节点dummy,指向head
  • 采用双指针p,q
  • p 比 q领先 n 个位置
  • p 指向最后一个节点 时, q 指向 要删除节点 的直接前驱

leetcode 237. 删除链表中的节点

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:void deleteNode(ListNode* node) {node->val = node->next->val;node->next = node->next->next;}
};
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:void deleteNode(ListNode* node) {*node = *(node->next);}
};

leetcode 83. 删除排序链表中的重复元素


/*** 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* deleteDuplicates(ListNode* head) {if(! head)return head;ListNode* p = head;while(p->next){if(p->val == p->next->val)p->next = p->next->next;else p = p->next;}return head;}
};

leetcode 61. 旋转链表

/*** 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* rotateRight(ListNode* head, int k) {if(!head || !head->next || !k)return head;ListNode* p = head;int n = 1;while(p->next){p = p->next;n ++;}k %= n;if(!k) return head;ListNode* dummy = new ListNode(-1);dummy->next = head;p = dummy;ListNode* q = dummy;while(k--)  p = p->next;while(p->next){p = p->next;q = q->next;}dummy->next = q->next;p->next = head;q->next = NULL;return dummy->next;}
};

注意

  • 后三条 修改指针语句 有bug
  • 故须 在程序 前面 处理 特殊情况
    1 链表仅有一个节点时
    2 k % n = 0 时
  • 核心思想
  1. 旋转k次,即将链表的 后k个节点 作为一个 整体 放在表头
  2. 故使用双指针找到 后k个节点
/*** 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* rotateRight(ListNode* head, int k) {if(!head)return head;ListNode* p = head;int n = 1;while(p->next){p = p->next;n ++;}k %= n;ListNode* dummy = new ListNode(-1);dummy->next = head;p = dummy;ListNode* q = dummy;while(k--)  p = p->next;while(p->next){p = p->next;q = q->next;}p->next = head;head = q->next;q->next = NULL;return head;}
};

leetcode 24. 两两交换链表中的节点

/*** 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* swapPairs(ListNode* head) {if(!head)return head;ListNode* dummy = new ListNode(-1);dummy->next = head;ListNode* p = dummy;ListNode* q = head;while(q && q->next){p->next = q->next;q->next = q->next->next;p->next->next = q;p = q;q = q->next;}return dummy->next;}
};
  • 情况① : 表为空,直接返回
  • 情况② : 表中元素数目为奇数,最后一个不做处理,故while循环条件时q和q的后继不为空
  • 情况③ : 一般情况
    在这里插入图片描述

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

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

相关文章

定积分的几何应用(总结非常全面!)

文章目录 1 原函数存在性和可积性1.1 函数可积的充分条件(判定条件)1.2 函数存在原函数的充分条件(判定条件)1.3 函数可积的必要条件(性质)1.4 变上限积分的性质 2 平面图形2.1 平面图形的面积2.1.1 直角坐…

【ES专题】ElasticSearch集群架构剖析

目录 前言阅读对象阅读导航前置知识笔记正文一、ES集群架构1.1 为什么要使用ES集群架构1.2 ES集群核心概念1.2.1 节点1.2.1.1 Master Node主节点的功能1.2.1.2 Data Node数据节点的功能1.2.1.3 Master Node主节点选举流程 1.2.2 分片1.3 搭建三节点ES集群1.3.1 ES集群搭建步骤1…

解析python爬取Ebay数据的方式

前言 Ebay是全球著名的电子商务平台之一,每天都有海量的商品信息涌入其中,在电商行业获取这些数据试试非常有价值的,为了更好地了解市场动态,掌握更多的电商行情。Python爬虫成为了必不可少的工具,本文将通过使用Http…

idea中配置spring boot单项目多端口启动

参照文章 https://zhuanlan.zhihu.com/p/610767685 项目配置如下 下面为 idea 2023,不同版本的设置有区别,但是没那么大,idea 2023默认使用新布局,切换为经典布局即可。 在项目根目录的.idea/workspace.xml文件里添加如下配置 &l…

高等数学教材重难点题型总结(十二)无穷级数

最后一更!原谅博主已经开始瞎写字了,最近压力太大,以后有时间用mathPix打出来,看起来更舒适一些~ 高数最后一章,重点在于审敛法和求解幂级数的收敛半径~ 高数基础笔记全部更新完毕,共12*336期&#xff0c…

SpringBoot项目多环境开发

1.yml文件(旧) 说明:旧的写法。 #应用环境 spring:profiles:active: dev --- #设置环境#生产环境 spring:profiles: pro server:port: 81--- #开发环境 spirng:profiles: dev server:port: 81--- #测试环境 spring:profiles: test server:p…

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

目录 一、前言 二、static关键字是什么? 三、static关键字修饰的对象是什么? 四、C 语言中的 static 🍎static的C用法 🍉static的重点概念 🍐static修饰局部变量 💦static在修饰局部变量和函数的作用 &a…

基于Google Colaboratory安装Go语言编译器操作流程

文章目录 1. 什么是Google Colaboratory2. 访问Google Colaboratory3. 创建新的笔记本4.【方法①】使用apt命令安装golang5.【方法②】使用Go安装包安装golang6. 参考链接 1. 什么是Google Colaboratory Colab是一种托管的笔记本电脑服务,不需要安装即可使用&#x…

STL(第三课):list

STL中的list是一个双向链表&#xff0c;它可以动态地将元素插入和删除&#xff0c;提供了许多方便的操作接口。下面我们来讲解一下CSTL list的相关内容。 list的创建比较简单&#xff0c;只需要包含头文件#include<list>&#xff0c;然后使用std::list模板即可声明一个li…

使用pdf2image pdf转图片

安装poppler https://wenku.csdn.net/answer/1zxh8ckp6i from pdf2image import convert_from_path, convert_from_bytes import os# https://github.com/Belval/pdf2imageoutput_folder ./ dpi_value 600 pdf_start_page 1 # pdf显示的第一页 start_page 237 # 真实页码 p…

二叉树按二叉链表形式存储,试编写一个判别给定二叉树是否是完全二叉树的算法

完全二叉树&#xff1a;就是每层横着划过去是连起来的&#xff0c;中间不会断开 比如下面的左图就是完全二叉树 再比如下面的右图就是非完全二叉树 那我们可以采用层序遍历的方法&#xff0c;借助一个辅助队列 当辅助队列不空的时候&#xff0c;出队头元素&#xff0c;入队头…

在 CelebA 数据集上训练的 PyTorch 中的基本变分自动编码器

摩西西珀博士 一、说明 我最近发现自己需要一种方法将图像编码到潜在嵌入中&#xff0c;调整嵌入&#xff0c;然后生成新图像。有一些强大的方法可以创建嵌入或从嵌入生成。如果你想同时做到这两点&#xff0c;一种自然且相当简单的方法是使用变分自动编码器。 这样的深度网络不…

SparkSQL

1、Spark简介 2、Spark-Core核心算子 3、Spark-Core 4、SparkSQL 文章目录 一、概述1、简介2、DataFrame、DataSet3、SparkSQL特点 二、Spark SQL编程1、SparkSession新API2、DataFrame2.1 创建DataFrame2.2 SQL 语法2.3 DSL语法 3、DataSet4、RDD、DataFrame、DataSet相互转换…

强大的pdf编辑软件:Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款强大的PDF编辑和管理软件&#xff0c;它提供了广泛的功能&#xff0c;使用户能够轻松创建、编辑、转换和共享PDF文档。通过直观的界面和先进的工具&#xff0c;用户可以快速进行文本编辑、图像调整、页面管理等操作&#xff0c;同时支持OCR技术&#…

Nginx重新编译并添加模块

1.查询Nginx配置参数 作用&#xff1a;一是检查所需模块是否已安装&#xff0c;二是将configure arguments: 后面的参数复制出来并保存&#xff0c;因为等会重新编译时还需将这些模块一同添加进去。 [rootreader ~]# nginx -V nginx version: nginx/1.24.0 built by gcc 8.5.0…

win10 + cmake3.17 + vs2017编译osgearth2.7.0遇到的坑

坑1&#xff1a;debug模式下生成osgEarthAnnotation时 错误&#xff1a;xmemory0(881): error C2440: “初始化”: 无法从“std::pair<const _Kty,_Ty>”转换为 to _Objty 出错位置&#xff1a;src/osgEarthFeatures/FeatureSourceIndexNode.cpp 解决办法&#xff1a; …

Docker Compose学习笔记

本文有以下几部分内容&#xff1a; Docker Compose用来做什么&#xff1f;Docker compose使用三步骤Docker Compose安装和查看版本Docker Compose常用命令Compose文档怎么写&#xff1f; Docker Compose用来做什么&#xff1f; Docker Compose 是Docker官方的开源项目。 Co…

镭神智能C16的ROS1驱动的安装方法

github 代码链接 git clone -b C16_V4.0 https://github.com/Lslidar/Lslidar_ROS1_driver.gitroslaunch lslidar_driver lslidar_c16.launch

unity 使用TriLib插件动态读取外部模型

最近在做动态加载读取外部模型的功能使用了triLib插件&#xff0c;废话不多说直接干货。 第一步下载导入插件&#xff0c;直接分享主打白嫖共享&#xff0c;不搞花里胡哨的。 链接&#xff1a;https://pan.baidu.com/s/1DK474wSrIZ0R6i0EBh5V8A 提取码&#xff1a;tado 导入后第…