当前位置: 首页 > news >正文

【数据结构篇】~链表算法题1(含快慢指针的解析)

前言

关于环形指针与快慢指针是算法题中的常客,如果能掌握将是我们的一大助力!

1.快慢指针

在这里插入图片描述

1 移除链表元素​

https://leetcode.cn/problems/remove-linked-list-elements/description/
在这里插入图片描述

1)思路

这道题可以用一个新链表来保存原链表中不是val的值,最后返回新链表的头节点就行。给一个newhead和ptail(作用:用来走链表),给一个purc用来遍历原链表以找到不是val的节点。

2)解析

 typedef struct ListNode slnode;
struct ListNode* removeElements(struct ListNode* head, int val) {slnode*newhead = NULL;slnode*ptail = NULL;slnode* purc=head;if(head==NULL)//给的原链表是空链表时{return NULL;} else//不是空链表{       while(purc){             if(purc->val != val)//当purc中的数据不是val时就''尾插''{if(newhead==NULL)//处理第一个不是val的节点{newhead=ptail=purc;}else//新链表有了第一个节点{ptail->next=purc;ptail=ptail->next;}}purc=purc->next;}if(ptail)//为了断开和原链表的链接ptail->next=NULL;return newhead;}
}

在这里插入图片描述

2 反转链表​

https://leetcode.cn/problems/reverse-linked-list/description/​
在这里插入图片描述

1)思路

反转链表整体来说是比较简单的。创建三个指针就能解决,
n1置为null,n2置为原链表的头指针,n3置为head->next,然后开始循环让n2指向n1,把n1给n2,n2给n3,n3给n3->next,知道n2为空时,n1就是新链表的头节点。

2解析

在这里插入图片描述

 typedef struct ListNode slnode;
struct ListNode* reverseList(struct ListNode* head) {if(head==NULL)//如果处理的是空链表{return NULL;}else//不是空链表{slnode* n1,*n2,*n3;n1=NULL;n2=head;n3=head->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3)//如果n3已经走到null,n3就不用走了n3=n2->next;}return n1;}
}

在这里插入图片描述

3 链表的中间结点​(快慢指针)

https://leetcode.cn/problems/middle-of-the-linked-list/description/​
在这里插入图片描述

1)思路

这道题经典的快慢指针,创建一个快指针,和一个慢指针,开始时两个指针都指向头节点,随后慢指针走一步快指针走两步,当快指针走到最后一个节点(链表有奇数个节点)或者为空时(链表有偶数个节点)慢指针就走到了中间节点

2)解析

在这里插入图片描述

typedef struct ListNode slnode;
struct ListNode* middleNode(struct ListNode* head) {slnode* quick=head;slnode* slow=head;if(head==NULL)//处理空链表{return NULL;}else{while(quick && quick->next)//这里quick不能为空,(是为了处理偶数个结点的情况){ slow=slow->next;quick=quick->next->next;//慢指针走一步,快指针走两步}return slow;}
}

在这里插入图片描述

4 合并两个有序链表​

https://leetcode.cn/problems/merge-two-sorted-lists/description/​
在这里插入图片描述

1)思路

这道题与之前的合并有序数组思路大致一致!
合并有序数组大家可以去看一看

2)解析

typedef struct ListNode slnode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{if(list1==NULL)//处理空链表{return list2;}else if(list2==NULL){return list1;}else//没有空链表{ slnode* newhead = NULL;slnode* newtail = NULL;while(list1 && list2){if(list1->val > list2->val)//比较,{if(newhead==NULL)//处理第一个节点{newhead=newtail=list2;  list2=list2->next;}else{newtail->next=list2;newtail=newtail->next;list2=list2->next;}}else{if(newhead==NULL)//处理第一个节点{newhead=newtail=list1;list1=list1->next;}else{newtail->next=list1;newtail=newtail->next;list1=list1->next;}}        }//处理有链表提前轮空if(list1)newtail->next=list1;if(list2)newtail->next=list2;return newhead;}
}

在这里插入图片描述

5 链表分割​

https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70
在这里插入图片描述
在这里插入图片描述

1)思路

创建两个新链表,一个放小于x的数据,一个放大于x的数据,最后连接两个链表

2)解析

#include <cstddef>
class Partition {
public:ListNode* partition(ListNode* pHead, int x){// write code hereListNode*lesshead,*lesstail,*bighead,*bigtail;lesshead  = lesstail = (ListNode*)malloc(sizeof(ListNode));//充当哨兵位bighead   = bigtail  = (ListNode*)malloc(sizeof(ListNode));ListNode*purc=pHead;while(purc){            if(purc->val < x)//放到小链表里{lesstail->next=purc;lesstail=lesstail->next;       }else//放到大链表里{bigtail->next=purc;bigtail=bigtail->next;}purc = purc->next;}bigtail->next=NULL;//防止形成环形链表成死循环lesstail->next=bighead->next;//连接大小链表ListNode* ret=lesshead->next;free(lesshead);free(bighead);lesshead=bighead=NULL;return ret;}
};

在这里插入图片描述

相关文章:

【数据结构篇】~链表算法题1(含快慢指针的解析)

前言 关于环形指针与快慢指针是算法题中的常客&#xff0c;如果能掌握将是我们的一大助力&#xff01; 1.快慢指针 1 移除链表元素​ https://leetcode.cn/problems/remove-linked-list-elements/description/ 1&#xff09;思路 这道题可以用一个新链表来保存原链表中不…...

洛谷 P1135 奇怪的电梯

链接直达&#xff1a;P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态 题目来源 洛谷 题目内容 奇怪的电梯 题目背景 感谢 yummy 提供的一些数据。 题目描述 呵呵&#xff0c;有一天我做了一个梦&#xff0c;梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯&…...

vue使用axios请求后端数据

前后端分离项目的基础&#xff1a; 前后端跨域访问 vite.config.js中加入 // 1.为什么要跨域 //因为浏览器的同源策略,不同站点之间访问需要跨域 //实现跨域的方式&#xff1a;server: {proxy: {// 假设要跨域访问的后端 API 地址以 /api 开头/api: { //表示拦截以/api开头的…...

目标检测 | yolov10 原理和介绍

相关系列&#xff1a; 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…...

基于Springboot 和Vue 的高校宿舍管理系统源码

网络上很多宿舍管理系统都不完整&#xff0c;大多数缺少数据库文件&#xff0c;所在使用极其不方便&#xff0c;由于本人程序员&#xff0c;根据代码&#xff0c;自己花时间不全了数据库文件&#xff0c;并且可以完美运行&#xff01;&#xff01;&#xff01;&#xff01;&…...

3:2比例的程序员专业显示器,效率提升显著,摸鱼时间又多了

对于我们程序员来说&#xff0c;显示器的重要性不言而喻&#xff0c;作为我们与代码交流的直接工具&#xff0c;他影响着我们的工作效率、舒适度和整体编程体验。我在家用的是自己笔记本的屏幕&#xff0c;简单写写代码还行&#xff0c;涉及到多任务协同或者大代码量开发就有点…...

vue3 cascader省市区三级联动如何指定字段,如何根据id查到对应的名字

如果我们接口数据字段名不是value和code。要加个props :props"{ value:code,label:regionName}"根据id查name需要一个ref和一个change事件<el-cascader :options"areaData" ref"addressCodeRef" change"handleChange" :props"…...

算法4:前缀和(上)

文章目录 一维前缀和二维前缀和寻找数组的中心下标除自身以外数组的乘积 一维前缀和 二维前缀和 寻找数组的中心下标 class Solution { public:int pivotIndex(vector<int>& nums) {int n nums.size();vector<int> f(n), g(n);f[0] nums[0];g[n - 1] num…...

美国政府紧急应对三星Galaxy手机安全漏洞

一、美国政府紧急通知更新三星Galaxy手机系统 美国政府近日发布紧急通知&#xff0c;要求联邦政府雇员在8月28日前更新三星Galaxy手机系统&#xff0c;否则将面临禁止使用这些设备的后果。这是继7月针对Pixel手机用户的类似要求之后的又一次紧急行动。此次事件的导火索是谷歌发…...

看 逆行人生

电影和我的职业本身有相关性&#xff0c;而且我特别喜欢徐峥执导的电影&#xff0c;这次的题材也算是碰上自己的胃口。 周六&#xff0c;下了大半天的雨&#xff0c;早上驱车到公司加班&#xff0c;下午六点多到时候特别想去看电影&#xff0c;果断再驱车从公司赶回来&#xff…...

0819、0820梳理及一些面试题梳理

一、抓包分析 二、HTTP服务器 三、动态库与静态库 四、一些面试题 指针数组和数组指针的区别&#xff1a;指针数组本质是一个数组&#xff0c;只是数组中存储的是指针变量。数组指针存储的是该数组的起始地址&#xff0c;对该指针来说每偏移一个单位就是偏移了一整个数组的地…...

HttpUtils工具类(一)常见的HttpUtils工具类及如何自定义java的http连接池

目录 一、几种常见的Http调用方式 1. 使用 Apache HttpClient 2. 使用 OKhttpClient 3. 使用第三方库&#xff08;Hutool&#xff09;的http链接池 4. 使用 Spring RestTemplate 5. 使用 Java 原生的HttpURLConnection 二、总结 常用三种HttpUtils对比总结 一、几种常见…...

使用 Lombok 遇到一个问题

起因是换了一个电脑&#xff0c;重新从服务器上拉了一个项目。项目是由maven构建的&#xff0c;在控制台中使用mvn命令编译项目时&#xff0c;没有任何问题&#xff0c;编译成功。如下图&#xff1a; 可是idea里面的源码&#xff0c;却标红了&#xff0c;如下&#xff1a; 错误…...

Linux基础环境开发工具gcc/g++ make/Makefile

1.Linux编译器-gcc/g使用 1. 预处理&#xff08;进行宏替换) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。 选项“-o”是指目标…...

ES 模糊查询 wildcard 的替代方案探索

一、Wildcard 概述 Wildcard 是一种支持通配符的模糊检索方式。在 Elasticsearch 中&#xff0c;它使用星号 * 代表零个或多个字符&#xff0c;问号 ? 代表单个字符。 其使用方式多样&#xff0c;例如可以通过 {"wildcard": {"field_name": "value&…...

Linux安装MQTT 服务器(图文教程)

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;专为低带宽和不稳定的网络环境设计&#xff0c;非常适合物联网&#xff08;IoT&#xff09;应用。 官网地址&#xff1a;https://www.emqx.com/ 一、版本选择 根据自己…...

【TCP】核心机制:延时应答、捎带应答和面向字节流

文章目录 延时应答捎带应答面向字节流粘包问题方案一&#xff1a;指定分隔符方案二&#xff1a;指定数据的长度 TCP 报头首部长度保留&#xff08;6 位&#xff09;选项序号确认序号 延时应答 尽可能降低可靠传输带来的性能影响 提升性能>让滑动窗口变大 如果我们立即返回 …...

题解:AT_abc352_e [ABC352E] Clique Connect

[题目通道]([ABC352E] Clique Connect - 洛谷) 鄙人今日写人生第一篇题解 希望管理大大通过 首先&#xff0c;我们先看题: 它说一共有n个点&#xff0c;m回操作。。。 每次操作 都有 一个Ki 和 Ci Ki代表有Ki个点,Ci代表每条边所赋的边权 一看就知道这是个最小生成树的板子…...

【代码随想录训练营第42期 Day32打卡 - 从零开始动态规划 - LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

目录 一、做题心得 二、动规五步走 三、题目与题解 题目一&#xff1a;509. 斐波那契数 题目链接 题解1&#xff1a;记忆性递归 题解2&#xff1a;动态规划 题目二&#xff1a;70. 爬楼梯 题目链接 题解&#xff1a;动态规划 题目三&#xff1a;746. 使用最小花费爬楼…...

源码构建LAMP

目录 一、安装Apache 二、安装Mysql 三、安装PHP 四、安装论坛 一、安装Apache 1.cd 到opt目录下面&#xff0c;将压缩包拉进Xhell 2.解压缩apr和httpd压缩包 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar xf httpd-2.4.29.tar.bz2 3.将apr-1.6.2 移动到ht…...

2025届必备的十大降重复率工具实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 用于学术论文、科研报告以及各类文档&#xff0c;提供查重与改写服务的在线工具是降重网站。…...

Qwen3.5-2B保姆级教程:20亿参数模型端侧部署与图文对话实操

Qwen3.5-2B保姆级教程&#xff1a;20亿参数模型端侧部署与图文对话实操 1. 模型简介 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型&#xff0c;属于Qwen3.5系列的小参数版本(20亿参数)。这个模型专为低功耗、低门槛部署场景设计&#xff0c;特别适合在端侧和边缘设备上运行…...

Realistic Vision V5.1 Streamlit界面源码解析:如何扩展自定义摄影滤镜

Realistic Vision V5.1 Streamlit界面源码解析&#xff1a;如何扩展自定义摄影滤镜 1. 项目背景与技术特点 Realistic Vision V5.1是目前SD 1.5生态中最顶级的写实风格模型之一&#xff0c;能够生成媲美专业单反相机拍摄的人像作品。本项目通过Streamlit框架构建了直观的交互…...

【转子】基于matlab转子型线对机油泵性能影响【含Matlab源码 15264期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

YOLOv8鹰眼目标检测实战:一键部署,实时识别80种物体(附WebUI)

YOLOv8鹰眼目标检测实战&#xff1a;一键部署&#xff0c;实时识别80种物体&#xff08;附WebUI&#xff09; 1. 项目概述 1.1 什么是YOLOv8鹰眼目标检测 YOLOv8鹰眼目标检测是基于Ultralytics最新YOLOv8模型的工业级解决方案。它能够在毫秒级别完成图像中多达80类物体的识别…...

RobotFramework自定义关键字开发指南:用Python扩展你的测试库

RobotFramework自定义关键字开发实战&#xff1a;Python扩展与分层设计 1. 为什么需要自定义关键字&#xff1f; 在自动化测试领域&#xff0c;RobotFramework以其关键字驱动的特性广受欢迎。但当你深入使用后会发现&#xff0c;标准库和第三方库提供的关键字往往无法完全满足…...

3大维度解析开源下载工具:如何让网盘效率提升80%

3大维度解析开源下载工具&#xff1a;如何让网盘效率提升80% 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...

手把手教你用V4L2框架开发USB摄像头驱动(附UVC协议解析)

深入解析V4L2框架下的USB摄像头驱动开发与UVC协议实战 在嵌入式Linux开发领域&#xff0c;视频采集设备的驱动开发一直是工程师们需要掌握的核心技能之一。随着物联网和边缘计算的快速发展&#xff0c;USB摄像头在各种智能设备中的应用越来越广泛&#xff0c;从工业检测到智能家…...

javaweb农家乐民宿客房美食预订活动管理系统

目录 同行可拿货,招校园代理 ,本人源头供货商系统功能模块划分核心业务流程设计数据分析功能技术实现要点 项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 同行可拿货,招校园代理 ,本人源头供货商 系统功能模块划分 用户管理…...

基于钓鱼邮件的 DarkSword 攻击对 iOS 设备的威胁机理与防御体系研究

摘要 2026 年 3 月曝光的 DarkSword 攻击以钓鱼邮件为传播载体&#xff0c;针对 iOS 18.4 至 18.7 版本 iPhone 设备实施无文件、静默式入侵&#xff0c;通过组合利用 WebKit 引擎与内核级漏洞实现远程代码执行与敏感数据窃取&#xff0c;已构成面向国际组织与特定目标的高级持…...