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日

相关文章

  • 解决django服务器重启端口被占用的问题

    解决django服务器重启端口被占用的问题 当我们在进行django开发时,经常需要启动一个本地的服务器来进行调试和测试。但是有时候,在关闭服务器后再次启动服务器时,我们会发现端口被占用了,这时候我们就需要解决这个问题。 查找占用端口的进程并杀死它 我们可以使用命令行来查找正在占用端口的进程,并关闭它。具体操作步骤如下: ① 打开命令提示符或终端,运行以下命…

    other 2023年6月27日
    00
  • Java Collections集合继承结构图_动力节点Java学院整理

    Java Collections(Java集合)是Java中比较重要的一个特性,它提供了一组实现常用数据结构的类和接口。Java中提供了很多的集合类,其中包括了List、Set、Map等集合类型。 这些集合类型在Java中的实现是基于不同的数据结构的,因此它们之间有着不同的特点和适用场景。我们可以通过Java Collections的继承结构图来更好的理解和…

    other 2023年6月26日
    00
  • IE11 For Win7、win2008中文版官方下载地址

    IE11 For Win7、Win2008中文版官方下载地址攻略 1. 访问微软官方网站 首先,你需要访问微软官方网站以获取IE11的下载地址。你可以通过以下步骤完成: 打开你的浏览器,输入微软官方网站的URL:https://www.microsoft.com/zh-cn/ 在微软官方网站的首页,你可以看到一个搜索框。在搜索框中输入\”IE11下载\”或者…

    other 2023年8月4日
    00
  • Java语言实现非递归实现树的前中后序遍历总结

    Java语言实现非递归实现树的前中后序遍历总结 为什么要用非递归实现树的遍历? 树的遍历可以使用递归实现,但是递归实现有可能导致栈溢出的问题,尤其是当树的层数比较深时。因此,使用非递归实现树的遍历可以避免这个问题。 非递归实现树的前序遍历 前序遍历的顺序是:根节点 –> 左子树 –> 右子树 public void preorder(Node…

    other 2023年6月27日
    00
  • JavaScript Class类实例讲解

    标题: JavaScript Class类实例讲解 正文: 在JavaScript中,利用类(Class)可以很方便地定义对象及其属性与方法。本文将介绍如何定义类、创建类的实例,以及如何使用类、继承类等相关操作。 1. 定义类 类定义可以采用class关键字来完成。类定义的基本格式如下: class MyClass { // 属性 a = 1; b = 2;…

    other 2023年6月27日
    00
  • echarts的option属性解析

    以下是ECharts的option属性解析的完整攻略,包含两个示例。 ECharts的option属性解析 ECharts是一个基于JavaScript的开源可视化库用于创建交互式的图表地图。在ECharts中,我们可以使用option属性来配置图表的样式和数据。以下是option属性详细攻略。 1. 基结构 option属性是一个JavaScript对象,…

    other 2023年5月9日
    00
  • idea神级插件及如何安装Bito插件【Bito-ChatGPT】

    安装Bito插件【Bito-ChatGPT】的完整攻略 Bito插件是一款基于GPT-3.5 Turbo模型的神级插件,它可以为你的Idea提供智能的建议和创意。下面是安装Bito插件的详细攻略: 步骤一:准备工作 在开始安装Bito插件之前,确保你已经完成以下准备工作: 安装最新版本的IDE或文本编辑器,如Visual Studio Code、PyChar…

    other 2023年7月27日
    00
  • 【spdy协议简介】

    SPDY协议是一种基于TCP的应用层协议,用于优化Web页面的加载速度。以下是关于SPDY协议的详细攻略: SPDY协议简介 SPDY协议是一种基于TCP的应用层协议,用于优化Web页面的加载速度。SPDY协议通过多路复用、头部压缩、服务器推送等技术,减少了HTTP协议的延迟和带宽占用,提高了Web页面的加载速度。SPDY协议还支持SSL加密,提高了数据的安…

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