当前位置: 首页 > article >正文

面试金典题2.4

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你不需要 保留 每个分区中各节点的初始相对位置。

示例 1:

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2
输出:[1,2]

提示:
  • 链表中节点的数目在范围 [0, 200] 内
  • -100 <= Node.val <= 100
  • -200 <= x <= 200

其实这道题我一开始还没理解到意思,我以为是要将整个链表的数字进行排序,后面发现其实没那么麻烦,它只需要跟给定的目标值进行比较就好了,比如给定目标值是5,那么只需要一个一个去跟5比较,比5小的放前面,比5大或相等的放后面。说到这里,其实这道题的思路已经出来了,就是去遍历整个链表,然后跟目标值进行比较,比目标值小的放在一个链表里面,比它大的放在另一个链表里面,然后把两个链表连接起来就是最后的结果。

leetcode代码如下

/**
 * 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* s=new ListNode(0);
        ListNode* l=new ListNode(0);
        ListNode* sh=s;
        ListNode* lh=l;
        while(head!=nullptr){
            if(head->val<x){
                s->next=head;
                s=s->next;
            }else{
                l->next=head;
                l=l->next;
            }
            head=head->next;
        }
        l->next=nullptr;
        s->next=lh->next;
        return sh->next;
    }
};


http://www.kler.cn/a/316408.html

相关文章:

  • 敏捷测试文化的转变
  • 刷新页面一次,错误地进行了多次重复调用后端服务
  • Android service framework笔记
  • 【c语言】简单的c程序设计
  • 【深度学习-调参】Batch 大小与类别数到底有没有潜在的关系?
  • 学习笔记(prism--视频【WPF-prism核心教程】)--待更新
  • Rust 文件与 IO
  • 【网络】TCP/IP 五层网络模型:数据链路层
  • 苍穹外卖学习笔记(五)
  • 高级java每日一道面试题-2024年9月19日-框架篇[Mybatis篇]-说一下mybatis的一级缓存和二级缓存?
  • Android对象池的深入理解和使用
  • 7.搭建个人金融数据库之快速获取股票列表和基本信息!
  • PowerShell install 一键部署Oracle12c
  • Guava中Preconditions校验
  • 数据安全治理
  • JVM 字节码与 JIT 编译详解
  • 云原生信息安全:筑牢数字化时代的安全防线
  • Vue3:mitt实现组件通信
  • Three.js 3D人物漫游项目(下)
  • 统信服务器操作系统a版e版【dde桌面限制登录次数】介绍
  • 大数据处理技术:HBase的安装与基本操作
  • python画正方形、平行四边形、六边形、五角星、风车(四个半圆)
  • ansible远程自动化运维、常用模块详解
  • SpringSecurity -- 入门使用
  • 网络安全-利用 Apache Mod CGI
  • antd table 可展开行的多种控制