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

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日

相关文章

  • c++作用域运算符用法(全局变量和局部变量)

    C++作用域运算符用法(全局变量和局部变量) C++中的作用域运算符(::)用于访问全局变量和局部变量。它允许我们在不同的作用域中访问同名的变量。 全局变量 全局变量是在任何函数之外声明的变量,可以在整个程序中访问。作用域运算符可以用于访问全局变量。 下面是一个示例: #include <iostream> int globalVariable …

    other 2023年7月29日
    00
  • Windows下SVN服务器搭建方法整理(apache)

    Windows下SVN服务器搭建方法整理(apache) 1. 安装Apache服务器 在Windows下搭建SVN服务器,需要先安装一个Apache服务器。可前往Apache官网(https://httpd.apache.org/)下载对应版本,安装时选择自定义模式,并确保勾选“启用CGI”和“启用所在目录访问权限”等选项。 2. 安装SVN 官方提供的W…

    other 2023年6月27日
    00
  • python函数递归调用的实现

    Python函数递归调用是指函数中调用自身的过程。通常情况下,递归调用可用于解决一些很难用循环实现的问题,例如求一个数的阶乘,或是进行文件夹遍历。 以下是实现Python函数递归调用的攻略: 步骤1:定义函数 首先,我们需要定义一个递归调用的函数。以下是一个计算n的阶乘的递归函数的例子: def factorial(n): if n == 1: return…

    other 2023年6月27日
    00
  • Java父类继承中的static和final用法

    Java父类继承中的static和final用法 在Java类继承中,子类可以继承父类的静态成员和常量。但是,静态成员和常量也可以被重新定义和修改。在本篇攻略中,我们将详细讲解Java父类继承中static和final的用法及实例。 static 在Java中,static的作用是使类加载时直接可用,而不必实例化。这意味着可以通过类名直接访问它们。 当子类继…

    other 2023年6月26日
    00
  • Win10第二波累积更新补丁汇总 KB3081424重启死循环尚未解决

    Win10第二波累积更新补丁汇总 KB3081424重启死循环尚未解决攻略 问题描述 近期,很多Win10用户升级了第二波累积更新补丁KB3081424后,在重启后会进入死循环,无法正常使用计算机。此问题目前尚未得到官方解决。本攻略将针对此问题提供一些解决方法。 解决方法 方法一:进入安全模式卸载更新 在Win10死循环界面,按住Shift键同时点击电源按钮…

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

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

    other 2023年8月6日
    00
  • monkey基本命令及脚本编写

    以下是“monkey基本命令及脚本编写”的完整攻略: monkey基本命令及脚本编写 Monkey是一款Android平台上的压力测试工具,可以拟用户在设备上执行各种操作,以测试应用程序的稳定性和性能。本攻略中,我们将重点介绍Monkey本命令及脚本编写。 基本命令 1. 运行Monkey 要运行Monkey,请命令行中输入以下命令: adb shell m…

    other 2023年5月7日
    00
  • Win10怎么修改本地账号的用户名 win10本地账户改名图文教程

    Win10怎么修改本地账号的用户名:win10本地账户改名图文教程 如果你已经设置了Windows 10本地账户并且想要更改账户的用户名,那么可以按照以下步骤进行修改。 步骤一:打开“设置”应用 在开始菜单中点击“设置”图标,然后选择“账户”。 步骤二:选择“家庭和其它用户” 在左侧菜单栏中选择“家庭和其它用户”。 步骤三:选择要修改的账户 在该页面中,你会…

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