C++实现LeetCode(86.划分链表)

yizhihongxing

C++实现LeetCode(86.划分链表)完整攻略

问题描述

给定一个链表和一个特定值$x$,对于链表中的所有小于$x$的节点,排列在大于或等于$x$的节点之前。同时保留链表节点的初始相对顺序。

例如,给定的链表是1->4->3->2->5->2, 给定的值是$3$。那么,目标答案是1->2->2->4->3->5

解决思路

首先,我们需要创建3个指针变量smallHead、smallTail、bigHead和bigTail用于分别指向小于$x$的节点的头、尾节点和大于等于$x$的节点的头、尾节点。

接着,我们遍历原链表,对于当前节点,如果它的值小于$x$,则把它链接在smallTail后面,并更新smallTail指针;如果大于等于$x`,则把它链接在bigTail后面,并更新bigTail指针。

最后,我们把smallTail链接到bigHead上,返回smallHead。

代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* smallHead = new ListNode(0), *smallTail = smallHead;
        ListNode* bigHead = new ListNode(0), *bigTail = bigHead;
        while (head != nullptr) {
            if (head->val < x) {
                smallTail->next = head;
                smallTail = smallTail->next;
            }
            else {
                bigTail->next = head;
                bigTail = bigTail->next;
            }
            head = head->next;
        }
        smallTail->next = bigHead->next;
        bigTail->next = nullptr;
        return smallHead->next;
    }
};

示例说明

示例1:

输入: 1->4->3->2->5->2 和 x = 3
输出: 1->2->2->4->3->5
解释: 小于3的节点排列在大于等于3的节点之前,并且保留原始链表中每个节点的相对顺序。

示例2:

输入: 2->1 && x = 2
输出: 1->2
解释: 所有节点的值小于2,就按照原样排列。

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

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

相关文章

  • .netframework4.7安装

    .NET Framework 4.7 安装 .NET Framework 是一个由微软公司开发的应用程序框架,包含了许多预编译代码,可以供开发人员使用,使得开发 Windows 应用程序更加容易。此外,还可以提高应用程序的性能、可靠性和安全性。 本文将介绍 .NET Framework 4.7 的安装步骤。如果你想使用最新的技术和开发应用程序,则可以使用 .…

    其他 2023年3月28日
    00
  • Linux基础学习之文件查找find的常见用法

    Linux基础学习之文件查找find的常见用法 在Linux系统中,文件查找是一项非常基础的技能,也是每个初学者必须掌握的技能之一。Linux系统提供了很多工具来搜索和查找文件,其中最著名的一个是”find”命令。本篇文章将为您介绍“find”命令的常见用法以及相应的实例说明。 命令语法 find [path…] [expression] 命令中的”pa…

    other 2023年6月26日
    00
  • Thinkphp5.0框架视图view的模板布局用法分析

    ThinkPHP 5.0框架视图(View)的模板布局用法分析攻略 1. 简介 ThinkPHP 5.0是一款流行的PHP开发框架,提供了强大的视图(View)功能,用于实现Web应用程序的模板布局。本攻略将详细介绍ThinkPHP 5.0框架视图的模板布局用法。 2. 模板布局的基本概念 模板布局是指在Web应用程序中,通过定义一个公共的模板文件,然后在该…

    other 2023年9月5日
    00
  • React中的CSS局部引入过程

    当在React中使用CSS时,可以使用局部引入的方式来管理样式。这种方式可以确保每个组件的样式只应用于该组件本身,而不会影响其他组件。下面是React中CSS局部引入的完整攻略: 创建一个React组件,并在组件的同级目录下创建一个CSS文件。例如,我们创建一个名为\”Button\”的组件,并在同级目录下创建一个名为\”Button.css\”的CSS文件…

    other 2023年8月6日
    00
  • centos7下安装java及环境变量配置技巧

    下面是”CentOS 7下安装Java及环境变量配置技巧”的完整攻略: 准备工作 在开始安装Java之前,我们需要做一些准备工作,具体如下: 1. 确认系统是否已经安装了Java 在终端输入以下命令: java -version 如果系统已经安装Java,它将显示Java的版本信息。如果没有,则会报错。 2. 检查系统版本 Java安装的方法和环境变量配置都…

    other 2023年6月27日
    00
  • golang中struct和interface的基础使用教程

    Golang中struct和interface的基础使用教程 1. Struct(结构体) 在Golang中,struct是一种自定义的数据类型,用于封装一组相关的数据字段。它类似于其他编程语言中的类,但没有继承和方法重载的概念。下面是一个使用struct的示例: package main import \"fmt\" // 定义一个Pe…

    other 2023年7月28日
    00
  • 守望先锋路人霸王英雄 路霸大型攻略

    守望先锋路人霸王英雄 路霸大型攻略 在守望先锋中,路霸(Roadhog)作为一个近战英雄,拥有高血量和强大的近身打击,因此常常被用作前线突击或防守核心区域。本攻略将详细介绍路霸的技能和战术应用,以及如何发挥其最大的战斗力。 基本信息 路霸是一名重装英雄,拥有600点生命值和150点护甲值。其武器为手持钩枪和双管猎枪,可以进行远距离粘杆抓取目标或近身打击攻击。…

    other 2023年6月27日
    00
  • Logback的使用及如何配置

    Logback的使用及如何配置攻略 1. 什么是Logback? Logback是一个开源的、可靠的、高性能的Java日志框架。它是log4j框架的继任者,提供了更快和更灵活的日志处理。 2. Logback的基本配置 首先,你需要在你的项目中引入Logback的依赖。在pom.xml文件中添加以下依赖: <dependencies> <d…

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