反转链表算法及优化(leetcode第206题)

题目描述:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:

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

输入:head = [1,2]
输出:[2,1]
示例 3:输入:head = []
输出:[]提示:链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000

算法一:

思路:

使用双指针prev和curr,分别代表前节点和当前节点,同时使用变量next记录curr->next

不断向后移,让curr指向prev

最终返回prev(此时为尾节点)

代码实现:
# include<stdlib.h>
# include<stdio.h>struct ListNode{int val;struct ListNode *next;
};struct ListNode *reverseList_one(struct ListNode *head){struct ListNode *prev=NULL;//前节点struct ListNode *curr=head;//当前节点while(curr){//当前节点为空退出struct ListNode *next=curr->next;//后节点curr->next->next=prev;//当前节点指向前节点prev=curr;//前节点后移curr=next;//当前节点后移}return prev;//prev指向最后节点,即新首节点
}

算法二:

思路:

使用递归算法,详见代码注释

更详细的理解见力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

代码实现:
struct ListNode *reverseList_two(struct ListNode *head){if(head==NULL || head->next==NULL){//首节点为空或者节点下一个为空//返回当前节点return head;}struct ListNode *newhead=reverseList_two(head->next);//递归到最后节点head->next->next=head;//反转指向head->next=NULL;//切断原指向return newhead;//返回未被操作的尾节点(新首节点)newhead
}

算法优化:

新情景:

反转从下标为left到下标为right的节点,包括这两个节点。若下标不合理,则不反转。保证left<right

算法:

思路:

固定一个指针(prev)在left-1处

对curr和next不断后移,重复以下操作:

  • next变为curr下一节点
  • curr指向next下一节点
  • next指向curr(即prev->next)
  • curr(即prev->next)变为next

最终实现反转

代码实现:

void reverseIndex(struct ListNode* head, int left, int right){if(left>=right){return;}struct ListNode *prev=head;for(int i=0;i<left;i++){prev=prev->next;}struct ListNode *curr=prev->next;struct ListNode *next;for (int i = 0; i < right - left; i++) {next = curr->next;curr->next = next->next;next->next = prev->next;prev->next = next;}
}

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

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

相关文章

Python 爬虫 小案例 之 快手下载视频

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 知识点: 动态数据抓包 requests发送请求开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests pip insta…

vue3-富文本编辑器(vue-quill)

官网&#xff1a;VueQuill | Rich Text Editor Component for Vue 3 安装 pnpm add vueup/vue-quilllatest 使用 局部使用 先导包 import { QuillEditor } from vueup/vue-quill import vueup/vue-quill/dist/vue-quill.snow.css; 再使用 <QuillEditor theme"snow…

最新AI系统ChatGPT网站H5系统源码,支持Midjourney绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

2023年湘潭大学软件工程考试总结

选择 选择是全部单选&#xff0c;没有把多选题改成单选题出&#xff0c;我还是太年轻了&#xff0c;出题肯定是怎么简单轻松怎么来。 判断 判断题也确实是完全来自头歌的原题 选择判断总共30分&#xff0c;确定能拿到的分数是22分&#xff0c;其他的确实是原题但是自己没有…

HarmonyOS应用程序包快速修复命令调试开发指导

快速修复命令行调试开发指导 当前阶段&#xff0c;HarmonyOS为开发者提供了命令行的调试开发工具可供使用。比如&#xff0c;包名为com.ohos.quickfix的示例应用&#xff0c;版本号为1000000。该应用的当前版本运行中有某问题需要修复&#xff0c;此时&#xff0c;开发者可参考…

python 实现粒子群算法(带绘制)

本文章用python实现了粒子群算法&#xff0c; 标准PSO的算法流程如下&#xff1a; 初始化一群微粒&#xff08;群体规模为m&#xff09;&#xff0c;包括随机的位置和速度&#xff1b;评价每个微粒的适应度&#xff1b;对每个微粒&#xff0c;将它的适应值和它经历过的最好位…

C++day2作业

把课上strcut的练习&#xff0c;尝试着改成class #include <iostream>using namespace std; class Stu { private:int age;string sex;int hign; public:int soce;void get_information();void set_information(); }; void Stu::set_information() {static Stu s1;cout …

【CSAPP】探究BombLab奥秘:Phase_1的解密与实战

&#x1f4cb; 前言 ​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《斯坦福大学之CSAPP》⏰诗赋清音&#xff1a;桃花灼灼春风暖&#xff0c;心随乐曲扬徐徐。 苦尽甘来梦未阑&#xff0c;岁月长河任舟游。 ​ &#x1f389;欢迎…

积极拥抱信创,思迈特软件与麒麟软件NeoCertify完成认证

近日&#xff0c;思迈特软件与麒麟软件有限公司进行了联合测试&#xff0c;并顺利完成产品兼容性测试。经评测&#xff0c;思迈特软件一站式大数据分析平台&#xff08;Smartbi Insight V11&#xff09;与银河麒麟高级服务器操作系统&#xff08;飞腾版&#xff09;V10、&#…

【Java面试题】java的反射机制

1.什么是反射 反射是在运行的时候&#xff0c;知道要操作的类是什么&#xff0c;并且在运行时获取类的完整构造&#xff0c;并调用对应的 方法 2.反射的主要功能 1. 在运行时判断任意一个对象所属的类 2.在运行时构造任意一个类的对象 3.在运行时判断任意一个类的成员变量…

ubuntu 在线安装 python3 pip

ubuntu 在线安装 python3 pip 安装 python3 pip sudo apt -y install python3 python3-pip升级 pip python3 -m pip install --upgrade pip

Kotlin 枚举类

使用 enum 修饰符&#xff1b;每个枚举常量都是一个对象&#xff0c;枚举常量以逗号分隔 // 枚举类 enum class Direction {NORTH, SOUTH, WEST, EAST }// 每一个枚举都是枚举类的实例&#xff0c;所以可以这样初始化 enum class Color(val rgb: Int) {RED(0xFF0000),GREEN(0x…

【Harmony OS - Stage应用模型】

基本概念 大类分为&#xff1a; Ability Module&#xff1a; 功能模块 、Library Module&#xff1a; 共享功能模块 编译时概念&#xff1a; Ability Module在编译时打包生成HAP&#xff08;Harmony Ability Package&#xff09;&#xff0c;一个应用可能会有多个HAP&#xf…

SQL高级:窗口函数

窗口函数,顾名思义,它的操作对象是窗口,即一个小的数据范围,而不是整个结果集。并且它是一个函数,在SQL中使用,所以一定有返回值。 窗口函数是SQL中非常有趣的部分,这一节我们就来学习一下它。 辅助表 方便我们后边的讲解,这里我们要建一张学生成绩表,建表语句如下…

深入理解与运用C语言中的Continue关键字

各位少年 在C语言编程中&#xff0c;循环语句是我们处理重复任务的重要工具。今天&#xff0c;我们将一起探讨一种能够优化循环结构的关键字——Continue。 一、理解Continue关键字 Continue关键字在C语言中用于跳过当前循环迭代的剩余部分&#xff0c;并立即开始下一次迭代…

test perf-02-性能测试之 LoadRunner LoadRunner 和 jmeter 的对比详细表格

LoadRunner LoadRunner is the premium, market leading performance testing solution for project teams. 特性 支持广泛的应用程序 极大地减少了在负载测试软件中模拟用户事务所需的时间和技能。 各种各样的连续测试 将负载测试集成到开发工具中:IDE、jUnit、nUnit、J…

Python从入门到熟练

文章目录 Python 环境Python 语法与使用基础语法数据类型注释数据类型介绍字符串列表元组集合字典 类型转换标识符运算符算数运算符赋值运算符复合运算符 字符串字符串拼接字符串格式化 判断语句bool 类型语法if 语句if else 语句if elif else 语句 循环语句while循环for 循环r…

Nacos身份认证权限绕过+漏洞利用工具分享

目录 一 JWT JWT: JWT的使用场景&#xff1a; JWT构造&#xff1a; 二 漏洞描述&#xff1a; 三 环境搭建 四 漏洞复现 五 工具漏洞复现 六 修复建议 七 工具分享 本文由掌控安全学院 - 小博 投稿 一 JWT JWT: JSON Web Token (JWT)是一个开放标准(RFC 7519)&…

记chrome的hackbar无法post php://input的问题

尽管hackbar支持post请求体&#xff0c;但是当请求体里面没有等于号的时候&#xff0c;无法post出去&#xff0c;这样如果需要使用php://input绕过waf的时候就没法做。 在开发人员工具的网络里面可以看到不使用等于号的情况下没有荷载。 之后在这里看到了解决方法&#xff0c;…

ctf_show(web入门笔记)持续更新中

信息收集 1-2&#xff1a;查看源代码 3&#xff1a;bp抓包 4&#xff1a;robots.txt&#xff08;这个文件里会写有网站管理者不想让爬虫的页面或其他&#xff09; 5&#xff1a;网站源代码泄露index.phps 6&#xff1a;同样也是源码泄露&#xff0c;&#xff08;拿到以后还…