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

反转链表II(C++解法)

题目

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

示例 1:

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

示例 2:

输入:head = [5], left = 1, right = 1
输出:[5]

C++代码

#include <iostream>
using namespace std;//创建链表结构体
struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}
};/*
* 反转链表问题
* 设置一个虚拟头节点,定义一个cur指针指向待反转区域的第一个节点left,
* 定义一个next指针永远指向cur的下一个节点,
* 定义一个pre指针永远指向待反转区域的第一个节点left的前一个节点,在循环过程中不变
* 迭代每一个需要反转的节点,返回反转后的链表
*/
ListNode* reverseBetween(ListNode* head, int left, int right) {ListNode* dummyNode = new ListNode(-1);dummyNode->next = head;ListNode* pre = dummyNode;for (int i = 0; i < left - 1; ++i) {pre = pre->next;}ListNode* cur = pre->next;ListNode* next;for (int i = 0; i < right - left; ++i) {next = cur->next;cur->next = next->next;next->next = pre->next;pre->next = next;}return dummyNode->next;
}int main() {ListNode* n1 = new ListNode(1);ListNode* n2 = new ListNode(2);ListNode* n3 = new ListNode(3);ListNode* n4 = new ListNode(4);ListNode* n5 = new ListNode(5);n1->next = n2;n2->next = n3;n3->next = n4;n4->next = n5;n5->next = nullptr;ListNode* head = n1;int left = 2, right = 4;ListNode* ans = reverseBetween(head, left, right);while (ans) {cout << ans->val << " ";ans = ans->next;}return 0;
}

分析

反转链表问题,设置一个虚拟头节点,定义一个 cur 指针指向待反转区域的第一个节点 left,定义一个 next 指针永远指向 cur 的下一个节点,定义一个 pre 指针永远指向待反转区域的第一个节点 left 的前一个节点,在循环过程中不变,迭代每一个需要反转的节点,返回反转后的链表。

http://www.lryc.cn/news/214764.html

相关文章:

  • 记一次 logback 没有生成独立日志文件问题
  • 数据库强化(1.视图)
  • Mysql与SeaweedFS数据不同步问题产生原因及解决办法
  • Kotlin apply和with用法和区别
  • springboot通过aop自定义注解@Log实现日志打印
  • k8spod详解其二
  • golang包的管理
  • Windows10安装Anaconda与Pytorch的记录
  • 图解Kafka高性能之谜(五)
  • opencv在linux上调用usb摄像头进行拍照
  • 软考之知识产品+例题
  • 玩了一下 Jenkins,最新版本 + JDK11
  • 自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目
  • C# 使用.NET的SocketAsyncEventArgs实现高效能多并发TCPSocket通信
  • 设计模式——观察者模式(Observer Pattern)+ Spring相关源码
  • openpnp - code review - 开机对话框历史记录和贡献者名单
  • JavaSE22——HashMap
  • 「图像 merge」无中生有制造数据
  • RK3588之ArmSoM-W3 + MPP实现多路硬解码拉流
  • 【Rust日报】2023-10-29 隆重推出 Rerun 0.10!
  • AI智能识别如何助力PDF,轻松实现文档处理?
  • 【SA8295P 源码分析】114 - 将Android GVM userdata文件系统从 EXT4 修改为 F2FS
  • LeetCode 387 字符串中的第一个唯一字符 简单
  • 线程池--简单版本和复杂版本
  • docker进阶
  • Unity HoloLens 2 应用程序发布
  • 3D RPG Course | Core 学习日记三:Navigation智能导航地图烘焙
  • Linux 启用本地ISO作为软件源
  • SpringCloud-Alibaba-Nacos2.0.4
  • docker运行镜像相关配置文件