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

LeetCode.02.04.分割链表

分割链表

给你一个链表的头节点 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]

解题思路:
使用双指针的思路来解决链表分区问题,通过创建两个新链表分别存储小于 x 和大于等于 x 的节点,最后合并这两个链表得到结果。

  1. 虚拟头节点初始化:分别为值小于 x 和大于等于 x 的节点创建虚拟头节点 head1head2,并将它们的 next 指针初始化为 NULL
  2. 遍历原链表:遍历原链表,根据节点值与 x 的大小关系,将节点连接到对应的链表尾部。
  3. 断开节点连接:在将节点连接到新链表后,断开该节点与原链表的连接,避免形成环。
  4. 合并链表:将存储大于等于 x 节点的链表连接到存储小于 x 节点的链表尾部。
  5. 释放虚拟头节点:释放创建的两个虚拟头节点。
  6. 返回结果:返回合并后链表的头节点。
struct ListNode* partition(struct ListNode* head, int x) {
    // 小的放 list1,大的放 list2
    struct ListNode* head1,* tail1,* head2,* tail2;
    head1 = tail1 = (struct ListNode*)malloc(sizeof(struct ListNode));
    head2 = tail2 = (struct ListNode*)malloc(sizeof(struct ListNode));
    // 初始化虚拟头节点的 next 指针
    head1->next = NULL;
    head2->next = NULL;
    struct ListNode* cur = head;
    while (cur) {
        struct ListNode* next = cur->next; // 保存当前节点的下一个节点
        if (cur->val < x) {
            tail1->next = cur;
            tail1 = tail1->next;
            tail1->next = NULL; // 断开当前节点与原链表的连接
        } else {
            tail2->next = cur;
            tail2 = tail2->next;
            tail2->next = NULL; // 断开当前节点与原链表的连接
        }
        cur = next;
    }
    tail1->next = head2->next;// 合并两个链表
    struct ListNode* result = head1->next;// 保存结果链表头节点
    free(head1);// 释放虚拟头节点
    free(head2);
    return result;
}    

相关文章:

  • Python深度学习基础——卷积神经网络(CNN)(PyTorch)
  • 第二章:Docker及Kubernetes基础 重难点详解_《再也不踩坑的kubernetes实战指南》
  • Simulink中Signal Builder在新版中找不到怎么办
  • leetcode12.整数转罗马数字
  • 从入门到进阶:React 图片轮播 Carousel 的奇妙世界!
  • linux查询inode使用率
  • Spring MVC 视图解析器(JSP、Thymeleaf、Freemarker、 JSON/HTML、Bean)详解
  • XML语法指南——从入门到精通
  • C#里使用WPF的MaterialDesignThemes
  • 回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测
  • UM621系列模块安装校准及注意事项
  • 逍遥模拟器ARM过检测技术全解析
  • 使用mybatisplus-join自带的分页方法进行分页查询,不依靠pagehelper
  • 表 vs 物化视图:核心区别与选型指南
  • Asynchronous Advantage Actor-Critic(A3C)
  • Xcode为不同环境配置不同的环境变量
  • docker部署certimateSSL证书管理自动续签
  • SAP 一个屏幕多ALV 例子
  • RabbitMQ惰性队列的工作原理、消息持久化机制、同步刷盘的概念、延迟插件的使用方法
  • HBuilder运行uni-app程序报错【Error: listen EACCES: permission denied 0.0.0.0:5173】
  • 邯郸做商城网站的公司/怎么宣传自己的产品
  • 网站开发公司推荐/景德镇seo
  • 邯郸当地招聘网站/网络推广平台
  • 在网上那里能接单做网站/柳市网站制作
  • 网站空间续费多少钱/产品推广方案范例
  • 网站如何做促销活动/中国国际新闻