C++实现LeetCode(92.倒置链表之二)

C++实现LeetCode(92.倒置链表之二)的完整攻略如下:

题目描述

给你一个单链表的头节点 head 和两个整数 leftright 。请你反转从位置 left 到位置 right 的链表节点,返回反转后的单链表。

解题思路

这是一道链表题目。要反转从位置left到位置right的链表节点,可以按照以下步骤进行:

  1. 先找到要反转前面的那个节点pre_left,和要反转节点最后面的那个节点pos_right。
  2. 记录pos_right之后的节点next_right。
  3. 将链表从left到right的部分进行反转。
  4. 将pre_left的next节点指向反转后的链表头节点,将反转后的链表尾节点指向next_right。

具体实现可以参考下面的代码。

代码实现

#include<iostream>
#include<vector>
using namespace std;

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        if(!head || !head->next)    return head;  // 特判,如果链表为空或者只有一个节点,则返回head

        ListNode* dummy = new ListNode(-1);   // 定义一个虚拟头节点,便于处理特殊情况
        dummy->next = head; // 虚拟头节点的next指向head

        ListNode* pre_left = dummy, *pos_right = dummy; // 定义pre_left和pos_right(初始值为dummy)
        for(int i = 1; i < left; ++i)
            pre_left = pre_left->next;
        for(int i = 1; i <= right; ++i)
            pos_right = pos_right->next;

        ListNode* next_right = pos_right->next;    // 记录pos_right之后的节点
        pos_right->next = NULL; // 将pos_right之后的节点断开

        ListNode* left_node = pre_left->next; // 记录要反转节点的头节点
        ListNode* reverse_head = reverseList(pre_left->next);  // 反转left到right之间的节点
        pre_left->next = reverse_head;  // 将pre_left的next节点指向反转后的链表头节点
        left_node->next = next_right;   // 将反转后的链表尾节点指向next_right

        return dummy->next;
    }

    ListNode* reverseList(ListNode* head) {  // 反转整个链表
        if(!head || !head->next)    return head;
        ListNode* p = reverseList(head->next);   // p指向反转后的链表头结点,即原链表的尾结点
        head->next->next = head;    // 反转当前节点和下一个节点
        head->next = NULL;  // 反转后将当前节点的next置为NULL
        return p;   // 返回反转后的链表头结点
    }
};

示例说明

输入: 1->2->3->4->5->NULL, left = 2, right = 4

输出: 1->4->3->2->5->NULL

输入: 5, left = 1, right = 1

输出: 5

以上就是C++实现LeetCode(92.倒置链表之二)的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现LeetCode(92.倒置链表之二) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Angular如何在应用初始化时运行代码详解

    Angular提供了多种方法在应用初始化时运行代码,以下是其中的几种方法: 1. AppModule的providers数组中添加APP_INITIALIZER 在AppModule中的providers数组中添加APP_INITIALIZER,可以运行一段代码来初始化应用程序。APP_INITIALIZER是一个工厂函数,它返回一个Promise。当Ang…

    other 2023年6月20日
    00
  • java版微信公众平台后台接入

    下面是“Java版微信公众平台后台接入”的完整攻略。 什么是微信公众平台后台接入 微信公众平台后台接入,又称为微信公众号开发,指的是将自己的服务与微信公众平台对接,实现在微信公众号中提供各种服务的开发行为。接入微信公众平台后,就能够使用微信公众平台提供的各种能力,比如自定义菜单、消息推送、客服消息、素材管理等。 步骤 1. 注册成为微信公众号开发者 首先需要…

    other 2023年6月26日
    00
  • R语言画正弦曲线

    R语言画正弦曲线 在R语言中,我们可以很方便地使用plot函数绘制正弦曲线。 准备数据 首先,我们需要准备数据。在这里,我们可以通过seq函数生成从0到2π的等间隔数字序列,然后再通过sin函数计算每个数字序列的正弦值。代码如下: x <- seq(0, 2 * pi, length.out = 100) y <- sin(x) 绘制图形 接下来…

    其他 2023年3月28日
    00
  • jdk环境变量配置不成功的原因?jdk环境变量配置不成功解决方法

    JDK环境变量配置不成功通常可以归结为以下几种原因: 安装JDK路径错误:在配置JDK环境变量时,需要确保填写的路径是正确的。如果错误地填写了旧版本的JDK路径或没有安装JDK,则环境变量配置可能会失败。 环境变量配置错误:在配置JDK环境变量时,必须正确地设置环境变量名和变量值。通常情况下,这会在系统变量中设置,以确保全局可用。 操作系统权限问题:如果你没…

    other 2023年6月27日
    00
  • php图片处理函数获取类型及扩展名实例

    PHP图片处理函数获取类型及扩展名实例攻略 在PHP中,可以使用一些内置的图片处理函数来获取图片的类型和扩展名。下面是一个详细的攻略,包含了两个示例说明。 步骤1:使用getimagesize()函数获取图片信息 getimagesize()函数可以获取图片的详细信息,包括类型和扩展名。该函数接受一个参数,即图片的路径,返回一个包含图片信息的数组。 示例代码…

    other 2023年8月6日
    00
  • Django 设置多环境配置文件载入问题

    Django 是一个开源的 Python Web 框架,它提供了灵活的配置和管理方式。在开发环境和生产环境中,我们通常需要有不同的配置文件来设置数据库连接、调试模式和静态文件等。本文将详细讲解如何在 Django 中设置多环境配置文件载入问题。 1. 准备工作 首先,我们需要在 Django 项目根目录下创建一个名为 settings 的文件夹,并在该文件夹…

    other 2023年6月27日
    00
  • Android开发模仿qq视频通话悬浮按钮(实例代码)

    Android开发模仿qq视频通话悬浮按钮(实例代码)攻略 简介 本攻略将详细讲解如何在Android应用中实现模仿QQ视频通话的悬浮按钮功能。悬浮按钮是一个浮动在屏幕上方的按钮,用户可以点击它来进行视频通话。我们将使用Java语言和Android Studio开发环境来完成这个示例。 步骤 步骤一:创建新项目 首先,在Android Studio中创建一个…

    other 2023年9月7日
    00
  • 关于element-ui resetFields重置方法无效问题及解决

    关于element-ui resetFields重置方法无效问题及解决的攻略如下: 问题描述 在使用Vue.js和Element UI开发网页时,有可能会遇到表单重置(resetFields方法)无效的问题,即调用resetFields方法后表单并没有恢复到初始状态。这通常会对用户体验造成影响,因此必须解决该问题。 问题分析 出现resetFields方法无…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部