2023-07-31力扣每日一题

news/2024/5/20 21:47:58

链接:

143. 重排链表

题意:

将链表L0 → L1 → … → Ln - 1 → Ln变成L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …

解:

线性表法还是好写的

这边搞一下翻转法,快慢指针求翻转点(翻转后面一半然后双指针合并成一个)

还是喜欢递归翻转或者新头结点翻转QWQ,不过还是写了一下循环直接翻转

找到翻转点(不包含在翻转后的链表里)之后先将记录TA的下一个然后TA->next=nullptr,将指针TA转到记录上,然后再记录TA的下一个,再将现在TA的next设成nullptr断开两部分链表

在这里插入图片描述

两个需要特判的地方,翻转点后面是nullptr则没有需要翻转的,翻转点后面的后面没有点则不需要进入循环(即不存在下一个<-代码注释)

然后每次记录处理节点的下一个N和下下一个NN,将下一个的next指向自身(翻转)(下一个代表节点,next代表指针)

这时候由于TA下一个的next指向TA,所以当TA移动到下一个以后,不能通过再访问next获取正确的下一个,所以要用nextnext来更新next,然后nextnext与后面还保持正确的顺序,用nextnext的next来更新nextnext

比较麻烦,感觉不如递归 总之就是先记录原顺序再进行翻转操作,就是很注意越界条件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

实际代码:

#include<bits/stdc++.h>
using namespace std;
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) {}
};
void add(ListNode* &temp,ListNode* &addor) 
{if(temp==nullptr) temp=addor;else{temp->next=addor;temp=temp->next;}
}
/*
void reorderList(ListNode* head)//线性表 
{ListNode* temp=head;vector<ListNode*>lists;while(temp!=nullptr){lists.push_back(temp);temp=temp->next;}int lg=lists.size();int l=0,r=lg-1;temp=nullptr;for(;l<=r;l++,r--){add(temp,lists[l]);if(l!=r) add(temp,lists[r]);}temp->next=nullptr;
}*/
void Build(ListNode* &Reverse,ListNode* temp)
{ListNode* next=temp->next,*nextnext;temp->next=nullptr;//前面断开后面temp=next;//截断前面不需要翻转的 if(temp->next!=nullptr)//存在下一个 {next=temp->next;//记录下一个 nextnext=next->next;//记录正确的下下个(可能是空)}else next=nullptr;temp->next=nullptr;//翻转后作为尾结点要指向空 //后面断开前面 完成断开 while(next!=nullptr){next->next=temp;//下一个指向自己 temp=next;//自己变成下一个 next=nextnext;//现在的下一个变成之前记录的正确目标 if(next!=nullptr) nextnext=next->next;//记录正确的下下个else break;}Reverse=temp;
}
void reorderList(ListNode* head)//翻转 
{ListNode *slow=head,*fast=head;while(slow!=nullptr&&fast!=nullptr){fast=fast->next;if(fast!=nullptr) fast=fast->next;else break;slow=slow->next;}cout<<slow->val<<endl;//翻转点 ListNode *Reverse=nullptr;if(slow->next!=nullptr) Build(Reverse,slow);//构建 slow=head,fast=Reverse;while(slow!=nullptr&&fast!=nullptr){ListNode *snext=slow->next,*fnext=fast->next;slow->next=fast;fast->next=snext;slow=snext;fast=fnext;}
}
int main()
{ListNode* head=nullptr;int n;cin>>n;ListNode* now=nullptr;for(int i=1;i<=n;i++){//int temp;cin>>temp;if(head==nullptr){head=new ListNode(i);now=head;}else{now->next=new ListNode(i);now=now->next;}}reorderList(head);
}

限制:

  • 链表的长度范围为 [1, 5 * 104]
  • 1 <= node.val <= 1000

http://www.mrgr.cn/p/00601631

相关文章

shell脚本:数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…

第五章 Opencv图像处理框架实战 5-3 图像阈值与平滑处理

图像阈值 ret, dst cv2.threshold(src, thresh, maxval, type) src&#xff1a; 输入图&#xff0c;只能输入单通道图像&#xff0c;通常来说为灰度图 dst&#xff1a; 输出图 thresh&#xff1a; 阈值 maxval&#xff1a; 当像素值超过了阈值&#xff08;或者小于阈值&am…

产品开发八大模块交流︱奇瑞新能源汽车产品开发院院长荣升格

奇瑞新能源汽车股份有限公司研发中心/产品开发院院长荣升格先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;产品开发八大模块交流。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; VUCA时代…

Linux之 环境变量

什么是环境变量 windows中也有个 Linux 环境变量 env linux和windows环境变量&#xff0c;功能类似的&#xff0c; windows系统的环境变量&#xff0c;在cmd中可以之间调用程序运行。这些程序的执行程序的路径&#xff0c;一般编辑在path变量中 环境变量都分全局的&#xff…

想做上位机,学C#还是QT?

学习C#还是Qt&#xff0c;取决于你的具体需求和偏好。 如果你计划开发跨平台的桌面应用程序&#xff0c;并且希望使用一种更轻量级、直观的界面框架&#xff0c;那么Qt可能是一个不错的选择。Qt是一个功能丰富且成熟的跨平台框架&#xff0c;支持多种开发语言&#xff08;包括…

[个人笔记] Windows配置NTP时间同步

Windows - 运维篇 第六章 Windows配置NTP时间同步 Windows - 运维篇系列文章回顾Windows配置NTP时间同步域控环境的NTP配置工作组环境的NTP配置Windows的CMD部分命令集 参考来源 系列文章回顾 第一章 迁移WinSrv系统到虚拟机 第二章 本地安全策略xcopy实现实时备份文件夹内容 …

[golang gin框架] 40.Gin商城项目-微服务实战之Captcha验证码微服务

本次内容需要 gin框架基础知识, golang微服务基础知识才能更好理解 一.Captcha验证码功能引入 在前面,讲解了微服务的架构等,这里,来讲解前面商城项目的 Captcha验证码 微服务 ,captcha验证码功能在前台,后端 都要用到 ,可以把它 抽离出来 ,做成微服务功能 编辑 这个验证码功能…

SBFI AM(Na+Indicator),129423-53-6,可用来预测纯化线粒体Na+梯

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ SBFI AM(NaIndicator)钠离子荧光探针 PART1----​Product structure&#xff1a; PART2----​Product specifications&#xff1a; 1.CAS No&#xff1a;129423-53-6 2.Molecular formula&#xff1a;C56H58N2O23 3.Molec…

Docker 容器生命周期:创建、启动、暂停与停止----从创建到停止多角度分析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

【后端面经】微服务构架 (1-6) | 隔离:如何确保心悦会员体验无忧?唱响隔离的鸣奏曲!

文章目录 一、前置知识1、什么是隔离?2、为什么要隔离?3、怎么进行隔离?A) 机房隔离B) 实例隔离C) 分组隔离D) 连接池隔离 与 线程池隔离E) 信号量隔离F) 第三方依赖隔离二、面试环节1、面试准备2、基本思路3、亮点方案A) 慢任务隔离B) 制作库与线上库分离三、章节总结 …

100个网络安全测试面试题

1、Burpsuite常用的功能是什么&#xff1f; 2、reverse_tcp和bind_tcp的区别&#xff1f; 3、拿到一个待检测的站或给你一个网站&#xff0c;你觉得应该先做什么&#xff1f; 4、你在渗透测试过程中是如何敏感信息收集的&#xff1f; 5、你平时去哪些网站进行学习、挖漏洞提交到…

NAT协议(网络地址转换协议)详解

NAT协议&#xff08;网络地址转换协议&#xff09;详解 为什么需要NATNAT的实现方式静态NAT动态NATNAPT NAT技术的优缺点优点缺点 NAT协议是将IP数据报头中的IP地址转换为另外一个IP地址的过程&#xff0c;主要用于实现私有网络访问公有网络的功能。这种通过使用少量的IP地址代…

C—数据的储存(下)

文章目录 前言&#x1f31f;一、练习一下&#x1f30f;1.例一&#x1f30f;2.例二&#x1f30f;3.例三&#x1f30f;4.例四 &#x1f31f;二、浮点型在内存中的储存&#x1f30f;1.浮点数&#x1f30f;2.浮点数存储&#x1f4ab;&#xff08;1&#xff09;.二进制浮点数&#x…

查找-多路查找详解篇

多路查找树 多路查找树&#xff08;Multway Search Tree&#xff09;是一种高级的树形数据结构&#xff0c;它 允许每个节点有多个子节点&#xff08;通常大于等于2&#xff09;。多路查找树的每个节点 可以存储多个关键字和对应的值。分类 2-3树&#xff08;2-3 Tree&#x…

微服务——服务异步通讯RabbitMQ

前置文章 消息队列——RabbitMQ基本概念容器化部署和简单工作模式程序_北岭山脚鼠鼠的博客-CSDN博客 消息队列——rabbitmq的不同工作模式_北岭山脚鼠鼠的博客-CSDN博客 消息队列——spring和springboot整合rabbitmq_北岭山脚鼠鼠的博客-CSDN博客 目录 Work queues 工作队列…

动态内存管理面试题

动态内存管理面试题 文章目录 动态内存管理面试题一、第一题此代码存在的问题运行结果分析原因修改 二、第二题此代码存在的问题运行结果分析原因修改 一、第一题 代码如下&#xff08;示例&#xff09;&#xff1a; #include<stdio.h> #include<string.h> #incl…

echarts遇到的问题

文章目录 折线图-区域面积图 areaStyley轴只有整数y轴不从0开始y轴数值不确定&#xff0c;有大有小&#xff0c;需要动态处理折线-显示label标线legend的格式化和默认选中状态x轴的lable超长处理x轴的相关设置 echarts各个场景遇到的问题 折线图-区域面积图 areaStyle areaStyl…

关于提示词 Prompt

Prompt原则 原则1 提供清晰明确的指示 注意在提示词中添加正确的分割符号 prompt """ 请给出下面文本的摘要&#xff1a; <你的文本> """可以指定输出格式&#xff0c;如&#xff1a;Json、HTML提示词中可以提供少量实例&#xff0c;…

ubuntu目录分析

在Ubuntu根目录下&#xff0c;以下是一些常见文件夹的含义&#xff1a; /bin&#xff1a;存放可执行文件&#xff0c;包含一些基本的命令和工具。 /boot&#xff1a;存放启动时所需的文件&#xff0c;如内核和引导加载程序。 /dev&#xff1a;包含设备文件&#xff0c;用于与硬…

【Uniapp】支付链转二维码

前言 提示&#xff1a;这个是一个很小的项目&#xff0c;大概30分钟就能搞定 实现方式&#xff1a;输入支付代码&#xff0c;存储到对应的数据库表中&#xff0c;二维码访问一个PHP文件通过id来进行重定向&#xff0c;这样就可以使每张二维码都是固定的&#xff0c;替换二维码…