2024/9/21 leetcode 19题 24题

news/2024/9/23 15:58:05/

目录

19.删除链表中的倒数第n个结点

题目描述

题目链接

解题思路与代码

24.两两交换链表中的结点

题目描述

题目链接

解题思路与代码


==================================================

19.删除链表中的倒数第n个结点

题目描述

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

题目链接

19.删除链表中的倒数第n个结点

解题思路与代码

就看这个例子,n = 2,

我们思路就是通过一个nhead虚拟头节点,然后定义left和right两个指针来求解。

假设链表一共m个结点,然后删除倒数第n个结点。

先让right 向右移动n个结点

然后让left和right同步移动

然后此时我们发现left->next就是要删除的结点,然后我们直接left->next = left->next ->next;

就可以求解,同时我们需要注意,需要对left->next进行delete操作,防止链表中只存在一个结点的情况。nhead->next就是我们最后返回结果。

这个方法原理就是,先然right移动n,那么之后left和right同步移动,相当于移动(m - n)次,这样left就处于了我们要删除节点的前一个结点,从而简化问题。

(c++代码)

/*** 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* nhead = new ListNode(0);nhead ->next = head;ListNode* left = nhead;ListNode* right = nhead;while( n -- ) {right = right ->next;}while(right != NULL && right ->next != NULL) {left = left->next;right = right ->next;}ListNode* tem = left ->next;left->next = left->next->next;delete(tem);return nhead ->next;}
};

24.两两交换链表中的结点

题目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

提示:

  • 链表中节点的数目在范围 [0, 100] 内
  • 0 <= Node.val <= 100

题目链接

24.两两交换链表中的结点

解题思路与代码

本题就是交换相邻结点,然后我们还是创立一个虚拟头节点pre ,然后我们使用cur进行遍历。

一次交换

二次交换

最终返回pre ->next即可

(c++ 代码)

/*** 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) {ListNode* nhead = new ListNode();nhead ->next = head;ListNode* cur = nhead;while( cur ->next != NULL && cur ->next ->next != NULL) {ListNode* start = cur ->next;ListNode* end = cur ->next ->next;cur ->next = end;start ->next = end ->next;end ->next = start;cur = start;}return nhead ->next;}
};


http://www.ppmy.cn/news/1529395.html

相关文章

NCNN 源码(1)-模型加载-数据预处理-模型推理

参考 ncnn 第一个版本的代码。 0 整体流程 demo&#xff1a;squeezenet ncnn 自带的一个经典 demo&#xff1a;squeezenet 的代码: // 网络加载 ncnn::Net squeezenet; squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_…

语音识别与语音控制的原理介绍

硬件平台 机器硬件&#xff1a;OriginBot(导航版/视觉版)PC主机&#xff1a;Windows&#xff08;>10&#xff09;/Ubuntu(>20.04)扩展硬件&#xff1a;X3语音版 运行案例 首先进入OriginBot主控系统&#xff0c;运行一下指令。请注意&#xff0c;部分操作OriginBot内暂…

JS渲染锻炼输入表单

前言 上篇文章为大家展现了好看的信息窗口&#xff0c;接下来我们跟着流程图看下一步 之前我们的带点击事件已经添加完毕&#xff0c;下一步就是当用户点击的时候&#xff0c;渲染锻炼形式&#xff0c;当然这是一个标签&#xff0c;可以提供给用户输入锻炼形式 实例 ● 我…

linux之mysql安装

1:mysql安装包下载 下载地址 可私信我直接获取安装包 2:linux下wget命令下载 下载地址 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz3:手动安装 将自己的安装包上传到对应的位置 解压 压缩包 使用命令 tar -zxvf mysql-5.7…

线性代数(宋浩版)(4)

2.4逆矩阵 &#xff08;不要把矩阵放在分母上&#xff09; 方阵的行列式 性质1 性质2 性质3 伴随矩阵&#xff08;只有方阵才有&#xff09; 1.求出所有元素的代数余子式&#xff08;矩阵先求行列式&#xff09;。 2.按行求的代数余子式按列放。 定理1&#xff08;重要&…

前端vue-子组件对于父组件的传值的约束

组件中可以传字符串&#xff0c;布尔值&#xff0c;数组&#xff0c;对象&#xff0c;函数 如果子组件对于父组件传来的值进行校验&#xff0c;那么我们把子组件中的props中的数据写成{}的形式 &#xff0c;在里面进行数据的约束 required&#xff1a;是必须要传值&#xff0c;…

关于less的基本使用

1、介绍及概述 1.1、解释 less 是方便开发人员书写CSS的一门预处理语言。浏览器只认识html /css /js格式的文件&#xff0c;所以直接引入.less文件&#xff0c;没有任何的效果&#xff0c;需要把less文件转换成css文件 1.2、概述 CSS弊端&#xff1a; 没有逻辑性、变量、函…

容器技术--Dockerfile 构建镜像

Dockerfile dockerfile 是一系列命令&参数构成的脚本,这些命令应用于基础镜像,最终创建一个新的镜像,可以提供一致的运行环境。【也可以登录容器,自己安装软件,最后commit为镜像】 命令 FROM 指定基础镜像(必须),如FROM ubuntu;每一个指令就生成一层镜像;RUN 运…