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

yizhihongxing

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日

相关文章

  • Android开发笔记之Android中数据的存储方式(二)

    Android开发笔记之Android中数据的存储方式(二) 在Android开发中,数据的存储是一个非常重要的话题。在上一篇文章中,我们介绍了Android中数据的存储方式之一,即使用SharedPreferences。在本篇文章中,我们将继续探讨Android中的其他数据存储方式。 1. 使用文件存储数据 Android中可以使用文件来存储数据。下面是一…

    other 2023年9月7日
    00
  • C语言文件操作函数大全(超详细)

    下面我来为你详细讲解一下“C语言文件操作函数大全(超详细)”的完整攻略。 1. 文件操作函数概述 在C语言中,文件操作函数是非常重要的一部分内容。文件操作函数的基本作用是对文件进行读、写、定位、创建、删除等相关操作,包括以下几类函数: 文件打开和关闭函数:fopen() 和 fclose() 文件读写函数:fscanf()、fprintf()、fgetc()…

    other 2023年6月26日
    00
  • Mysql误删数据解决方案及kill语句原理

    Mysql误删数据是一个常见的问题,本文提供Mysql误删数据解决方案及kill语句原理的完整攻略。 Mysql误删数据解决方案 第一步:立刻停止所有对数据库的写入操作 如果发生了误删数据,最重要的是立刻停止所有对数据库的写入操作,避免数据被覆盖或者更新。停止数据操作后,可以用一些数据恢复工具尝试还原误删数据。 第二步:用show processlist命令…

    other 2023年6月26日
    00
  • Win10无法安装KB3140768补丁重启后还原该怎么办?

    Win10无法安装KB3140768补丁重启后还原该怎么办? 如果在Windows 10安装KB3140768补丁后遇到了问题,重启后系统出现异常,那么我们需要采取以下的步骤来还原系统: 进入安全模式 首先,我们需要让Windows 10进入安全模式,以便于能够进行后续的操作。 方法一:在Windows 启动时按下“Shift”键,按住不放。直到显示屏幕出现…

    other 2023年6月27日
    00
  • vue router-view的嵌套显示实现

    Vue Router-View的嵌套显示实现攻略 Vue Router是Vue.js官方提供的路由管理器,它可以帮助我们在Vue应用中实现页面的切换和导航。其中,router-view是Vue Router提供的一个组件,用于显示当前路由对应的组件内容。在本攻略中,我们将详细讲解如何实现router-view的嵌套显示。 1. 创建Vue Router实例 …

    other 2023年7月27日
    00
  • js封装tab标签页实例分享

    让我们开始讲解“js封装tab标签页实例分享”的完整攻略。 什么是Tab标签页? Tab标签页是常见的一种页面展示方式,通常用于多个页面之间进行切换,实现单页应用程序(SPA)或多标签应用程序,可以让用户直观地浏览内容。 如何使用js封装Tab标签页? 以下是一些关键步骤来创建一个可复用的Tab标签页组件: 第一步:HTML 结构 我们需要先在HTML中定义…

    other 2023年6月25日
    00
  • Color Blender—在线渐变色带生成器

    Color Blender—在线渐变色带生成器 在网页设计和开发过程中,渐变色带可以赋予网页更美观、更生动的视觉效果。而在制作渐变色带时,通过手工选择每一个具体颜色来实现意向效果,显然太费时太麻烦了。于是,我们需要一个高效而可靠的渐变色带生成器。今天,我推荐一款非常优秀的在线渐变色带生成器 Color Blender。 Color Blender的特点 …

    其他 2023年3月28日
    00
  • java中file.separator作用详解

    Java中file.separator作用详解 在Java中,file.separator是一个系统属性,用于表示文件路径中的分隔符。file.separator的值在不同的操作系统中是不同的。例如在Windows中,file.separator的值是\,而在Linux中,file.separator的值是/。以下是Java中file.separator的详…

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