【数据结构篇】~链表算法题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(含快慢指针的解析)
前言 关于环形指针与快慢指针是算法题中的常客,如果能掌握将是我们的一大助力! 1.快慢指针 1 移除链表元素 https://leetcode.cn/problems/remove-linked-list-elements/description/ 1)思路 这道题可以用一个新链表来保存原链表中不…...
洛谷 P1135 奇怪的电梯
链接直达:P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态 题目来源 洛谷 题目内容 奇怪的电梯 题目背景 感谢 yummy 提供的一些数据。 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯&…...
vue使用axios请求后端数据
前后端分离项目的基础: 前后端跨域访问 vite.config.js中加入 // 1.为什么要跨域 //因为浏览器的同源策略,不同站点之间访问需要跨域 //实现跨域的方式:server: {proxy: {// 假设要跨域访问的后端 API 地址以 /api 开头/api: { //表示拦截以/api开头的…...
目标检测 | yolov10 原理和介绍
相关系列: 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…...
基于Springboot 和Vue 的高校宿舍管理系统源码
网络上很多宿舍管理系统都不完整,大多数缺少数据库文件,所在使用极其不方便,由于本人程序员,根据代码,自己花时间不全了数据库文件,并且可以完美运行!!!!&…...
3:2比例的程序员专业显示器,效率提升显著,摸鱼时间又多了
对于我们程序员来说,显示器的重要性不言而喻,作为我们与代码交流的直接工具,他影响着我们的工作效率、舒适度和整体编程体验。我在家用的是自己笔记本的屏幕,简单写写代码还行,涉及到多任务协同或者大代码量开发就有点…...
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手机系统 美国政府近日发布紧急通知,要求联邦政府雇员在8月28日前更新三星Galaxy手机系统,否则将面临禁止使用这些设备的后果。这是继7月针对Pixel手机用户的类似要求之后的又一次紧急行动。此次事件的导火索是谷歌发…...
看 逆行人生
电影和我的职业本身有相关性,而且我特别喜欢徐峥执导的电影,这次的题材也算是碰上自己的胃口。 周六,下了大半天的雨,早上驱车到公司加班,下午六点多到时候特别想去看电影,果断再驱车从公司赶回来ÿ…...
0819、0820梳理及一些面试题梳理
一、抓包分析 二、HTTP服务器 三、动态库与静态库 四、一些面试题 指针数组和数组指针的区别:指针数组本质是一个数组,只是数组中存储的是指针变量。数组指针存储的是该数组的起始地址,对该指针来说每偏移一个单位就是偏移了一整个数组的地…...
HttpUtils工具类(一)常见的HttpUtils工具类及如何自定义java的http连接池
目录 一、几种常见的Http调用方式 1. 使用 Apache HttpClient 2. 使用 OKhttpClient 3. 使用第三方库(Hutool)的http链接池 4. 使用 Spring RestTemplate 5. 使用 Java 原生的HttpURLConnection 二、总结 常用三种HttpUtils对比总结 一、几种常见…...
使用 Lombok 遇到一个问题
起因是换了一个电脑,重新从服务器上拉了一个项目。项目是由maven构建的,在控制台中使用mvn命令编译项目时,没有任何问题,编译成功。如下图: 可是idea里面的源码,却标红了,如下: 错误…...
Linux基础环境开发工具gcc/g++ make/Makefile
1.Linux编译器-gcc/g使用 1. 预处理(进行宏替换) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。 选项“-o”是指目标…...
ES 模糊查询 wildcard 的替代方案探索
一、Wildcard 概述 Wildcard 是一种支持通配符的模糊检索方式。在 Elasticsearch 中,它使用星号 * 代表零个或多个字符,问号 ? 代表单个字符。 其使用方式多样,例如可以通过 {"wildcard": {"field_name": "value&…...
Linux安装MQTT 服务器(图文教程)
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽和不稳定的网络环境设计,非常适合物联网(IoT)应用。 官网地址:https://www.emqx.com/ 一、版本选择 根据自己…...
【TCP】核心机制:延时应答、捎带应答和面向字节流
文章目录 延时应答捎带应答面向字节流粘包问题方案一:指定分隔符方案二:指定数据的长度 TCP 报头首部长度保留(6 位)选项序号确认序号 延时应答 尽可能降低可靠传输带来的性能影响 提升性能>让滑动窗口变大 如果我们立即返回 …...
题解:AT_abc352_e [ABC352E] Clique Connect
[题目通道]([ABC352E] Clique Connect - 洛谷) 鄙人今日写人生第一篇题解 希望管理大大通过 首先,我们先看题: 它说一共有n个点,m回操作。。。 每次操作 都有 一个Ki 和 Ci Ki代表有Ki个点,Ci代表每条边所赋的边权 一看就知道这是个最小生成树的板子…...
【代码随想录训练营第42期 Day32打卡 - 从零开始动态规划 - LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
目录 一、做题心得 二、动规五步走 三、题目与题解 题目一:509. 斐波那契数 题目链接 题解1:记忆性递归 题解2:动态规划 题目二:70. 爬楼梯 题目链接 题解:动态规划 题目三:746. 使用最小花费爬楼…...
源码构建LAMP
目录 一、安装Apache 二、安装Mysql 三、安装PHP 四、安装论坛 一、安装Apache 1.cd 到opt目录下面,将压缩包拉进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…...
为开源项目OpenClaw配置Taotoken作为后端模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为开源项目OpenClaw配置Taotoken作为后端模型供应商 OpenClaw是一个功能强大的开源智能体(Agent)框架&…...
小红书无水印下载工具XHS-Downloader:3种使用模式全解析
小红书无水印下载工具XHS-Downloader:3种使用模式全解析 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&a…...
多智能体的协作成本:沟通开销、上下文膨胀与优化手段
多智能体的协作成本:沟通开销、上下文膨胀与优化手段 1. 标题 (Title) 多智能体系统的协作困境:解析沟通开销与上下文膨胀 从理论到实践:优化多智能体协作成本的完整指南 协作的代价:多智能体系统中的沟通、上下文与优化策略 打破协作壁垒:如何有效降低多智能体系统的运行…...
UVa 366 Cutting Up
题目描述 拼布者经常需要将布料切割成 111 \times 111 的小正方形。他们有一种特殊工具(旋转切割刀),可以一次切割多层布料,切割层数的上限由布料类型决定(题目输入的第一个参数 KKK)。切割时,无…...
CircuitPython状态灯、安全模式与文件系统故障排查实战指南
1. 项目概述与核心价值 如果你正在用CircuitPython做项目,无论是物联网传感器节点、智能穿戴设备还是互动艺术装置,大概率都遇到过这样的瞬间:板子上的RGB状态灯突然开始闪烁诡异的颜色,或者电脑上那个熟悉的 CIRCUITPY U盘图标…...
GitClaw:基于Go的轻量级Git钩子服务器与集中式权限管理方案
1. 项目概述与核心价值如果你是一名开发者,尤其是经常在团队协作中处理Git仓库的工程师,那么你一定对“权限管理”这四个字又爱又恨。爱的是它能保障代码安全,恨的是它配置起来繁琐,尤其是在处理跨项目、跨团队的复杂权限矩阵时。…...
Seraphine终极指南:英雄联盟智能助手如何提升您的游戏胜率
Seraphine终极指南:英雄联盟智能助手如何提升您的游戏胜率 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的激烈对局中,错过对局接受、BP阶段犹豫不决、缺乏队友对手信息&a…...
CC2530与ESP8266物联网网关:ZigBee转Wi-Fi通信协议转换实战
1. 项目概述:当ZigBee遇上Wi-Fi最近在折腾一个智能家居的传感器节点,核心是TI的CC2530 ZigBee芯片。这玩意儿功耗低、组网方便,是很多低功耗传感网络的绝佳选择。但问题来了,ZigBee网络的数据最终怎么方便地送到我们手机上去看呢&…...
技能即代码:用自动化工具构建个人技能维护系统
1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“skill-guardian”,作者是0xtresser。乍一看这个名字,可能有点摸不着头脑,但点进去研究了一下,发现这其实是一个关于“技能守护”或者说“技能管理”的…...
Go语言轻量级规则引擎Airules:高性能架构与微服务实践
1. 项目概述:从“Airules”看现代规则引擎的轻量化实践最近在GitHub上看到一个挺有意思的项目,叫“Airules”。光看名字,你可能会联想到“AI规则”或者“空气规则”,其实它的全称是“Air Rules”,直译过来就是“空气规…...
