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

分隔链表(精美图示详解哦)

全文目录

  • 引言
  • 分隔链表
    • 题目描述与思路
    • 实现
  • 总结

引言

前面,我们熟悉了管理链表中的数据的方法,也了解了几道与链表相关的题目:
戳我看单链表详解哦

在本篇文章中,我们将再了解一道题目:分隔链表:
分隔链表OJ链接

分隔链表

题目描述与思路

在这里插入图片描述
这道题要求我们实现将一个点链表中,val大于等于x的结点与val小于x的结点分隔:小于x的结点在大于x的结点前。并且原链表中的数据顺序不能发生改变。
即,若链表数据为1、4、3、2、5、2,x=3时,分隔后的链表为:1、2、2、4、3、5。

输入两个参数:链表的首结点地址head与分隔标准x。结构体变量与主函数部分已经定义,我们只需要实现接口即可。

不难想到,只要遍历整个链表,然后将val小于x的结点尾插到一个链表中,将val大于等于x的结点尾插到一个链表中。遍历结束后,再将两个链表连接起来即可。
又由于直接尾插时,当链表为空时,处理会比较麻烦,且还需要判断链表是否为空。用有哨兵位头结点的链表尾插即可:

实现

为了使代码更简洁,我们可以对结构体名称重命名:

typedef struct ListNode ListNode;

为实现这个算法,我们首先需要一个结构体指针cur,并将其初始化为head,用来遍历单链表:

ListNode* cur = head;

然后,我们需要4个指针,分别为val小于x的结点存放的链表的头结点地址与尾结点地址;val大于等于x的结点存放的链表的头节点地址与尾结点地址。将他们全部初始化为NULL:

ListNode* above = NULL;
ListNode* low = NULL;
ListNode* abovetail = NULL;
ListNode* lowtail = NULL;

然后,动态开辟两个哨兵位头节点的空间并断言其是否成功开辟:

above = abovetail = (ListNode*)malloc(sizeof(ListNode));
low = lowtail = (ListNode*)malloc(sizeof(ListNode));
assert(above && low);

然后,在将两链表头结点的next成员都初始化为NULL后(防止有某一链表为空时出现问题),就可以开始遍历了。

while循环遍历整个链表,条件为cur不为空:
若cur->val < x:
将lowtail->next改为cur,即连接low链表的尾结点与cur。然后lowtail=lowtail->next,即让lowtail指针向后移动一个结点,继续指向链表的尾结点。然后cur=cur->next,即cur向后移动一位;
若cur-> <= x:
将abovetail->next改为cur,即连接above链表的尾结点与cur。然后abovetail=abovetail->next,即让abovetail指针向后移动一个结点,继续指向链表的尾结点。然后cur=cur->next,即cur向后移动一位。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

遍历结束后,lowtail->next = above->next,即将above链表连接到low链表的后面。然后abovetail->next = NULL,即,将连接后的链表的尾结点的next成员改为NULL:

最后,free释放动态开辟的两块内存空间。但是由于释放后就不能返回值,所以先用一个ret指针记录low->next的值,等释放low与above指向的空间后,返回ret即可:
在这里插入图片描述

struct ListNode* partition(struct ListNode* head, int x)
{typedef struct ListNode ListNode;ListNode* cur = head;ListNode* above = NULL;ListNode* low = NULL;ListNode* abovetail = NULL;ListNode* lowtail = NULL;above = abovetail = (ListNode*)malloc(sizeof(ListNode));low = lowtail = (ListNode*)malloc(sizeof(ListNode));assert(above && low);above->next = low->next = NULL;while (cur){if (cur->val < x){lowtail->next = cur;lowtail = lowtail->next;cur = cur->next;}else{abovetail->next = cur;abovetail = abovetail->next;cur = cur->next;}}lowtail->next = above->next;abovetail->next = NULL;ListNode* ret = low->next;free(low);free(above);return ret;
}

总结

到此,关于分隔链表的介绍就结束了。
接下来会继续介绍链表的相关知识,欢迎大家持续关注哦

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦

相关文章:

分隔链表(精美图示详解哦)

全文目录引言分隔链表题目描述与思路实现总结引言 前面&#xff0c;我们熟悉了管理链表中的数据的方法&#xff0c;也了解了几道与链表相关的题目&#xff1a; 戳我看单链表详解哦 在本篇文章中&#xff0c;我们将再了解一道题目&#xff1a;分隔链表&#xff1a; 分隔链表OJ…...

腾讯乐固加固+app签名+多渠道打包

一、腾讯乐固-基础版免费加固-上传未加固的app-下载加固包&#xff08;加固成功会清除原apk的签名信息和多渠道信息&#xff09;https://console.cloud.tencent.com/ms/reinforce/list/basic二、使用AndroidStudio自带工具apksigner对apk重新签名找到apksigner.bat文件 路径D:\…...

Spring Boot整合Redis缓存(Lettuce)

spring-boot-demo-cache-redis 此 demo 主要演示了 Spring Boot 如何整合 redis&#xff0c;操作redis中的数据&#xff0c;并使用redis缓存数据。连接池使用 Lettuce。 Lettuce官网 pom.xml <!-- data-redis --> <dependency><groupId>org.springframework…...

Feign

而Feign则会完全代理HTTP请求&#xff0c;我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix&#xff0c;可以让我们不再需要显式地使用这两个组件。 Feign具有如下特性&#xff1a; 支持可插拔的HTTP编码器和解码器; 支持Hystrix和…...

【代码训练营】day54 | 392.判断子序列 115.不同的子序列

所用代码 java 判断子序列 LeetCode 392 题目链接&#xff1a;判断子序列 LeetCode 392 - 简单 思路 这题和之前求最长公共子序列一样。 dp[i] [j]&#xff1a;以i-1为结尾的字符串s 和 以j-1为结尾的字符串t 组成的相同子序列的长度 递推公式&#xff1a; 相等dp[i][j] d…...

【unity3D】创建TextMeshPro(TMP)中文字体(解决输入中文乱码问题)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的TMP中文输入显示乱码的解决方式 创建 TextMeshPro 中文字体遇到的问题描述解决方式Font Asset Creator 面板扩展中文字体文本遇到…...

JAVA开发(JAVA中的异常)

在java开发与代码运行过程中&#xff0c;我们经常会遇到需要处理异常的时候。有时候是在用编辑器写代码&#xff0c;点击保存的时候&#xff0c;编辑器就提示我们某块代码有异常&#xff0c;强制需要处理。有时候是我们启动&#xff0c;运行JAVA代码的时候的&#xff0c;日志里…...

lesson8-Linux多线程

Linux线程概念 线程在进程内部执行,是OS调度的基本单位OS是可以做到让进程进行资源的细粒度划分的物理内存是以4kb为单位的我们的.exe可执行程序本来就是按照地址空间的方式进行编译的页表映射 - 详细图 理解线程 线程在进程的地址空间内运行, 进程内部具有多个执行流的,而线程…...

python的django框架从入门到熟练【保姆式教学】第四篇

在前三篇博客中&#xff0c;我们介绍了Django的模型层、数据库迁移、视图层和URL路由。本篇博客将介绍Django的模板层&#xff0c;讲解如何使用模板来创建美观的Web页面。 模板层&#xff08;Template&#xff09; Django的模板层是Django应用程序的另一个核心组件。模板是一…...

Codeforces Round 852 (Div. 2)

A Yet Another Promotion 题意&#xff1a;要买n千克物品&#xff0c;第一天的价格为a&#xff0c;第二天的价格为b。第一天有促销活动&#xff0c;每买m千克物品&#xff0c;可以额外获得1千克物品。问最少花费多少可以获得至少n千克的物品。 思路&#xff1a;分类讨论&…...

【PTA Data Structures and Algorithms (English)】7-2 Reversing Linked List

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K3, then you must output 3→2→1→6→5→4; if K4, you must output 4→3→2→1→5→6. Input Specif…...

Jetpack Compose 学习汇总

关于 Jetpack Compose 的学习本想只是简单的快速学习一下&#xff0c;结果万万没想到&#xff0c;竟然一下子折腾了好几个月。。。 下面将之前记录的 Jetpack Compose 相关的学习博文进行一个汇总链接整理&#xff0c;方便我以后自己查阅&#xff0c;也希望能帮到一些有正在学…...

【OpenCv】c++ 图像初级操作 | 图像灰度化

文章目录一、图像1、图像信息2、图像种类1&#xff09;二值图像&#xff1a;2&#xff09;灰度图:3&#xff09;彩色图&#xff1a;二、图像转化1、分离彩色图三个通道2、图像灰度化处理一、图像 1、图像信息 Q&#xff1a;图像在计算机中怎么储存&#xff1f; A&#xff1a;…...

VIT(vision transformer)onnx模型解析

背景&#xff1a;transformer在CV领域的应用论文下载链接&#xff1a;https://arxiv.org/abs/2010.11929Pytorch实现代码&#xff1a; pytorch_classification/vision_transformer(太阳花的小绿豆博主实现的代码)有一些大神在研究关于CNNtransformer或者纯用transformer实现。原…...

红黑树的介绍和实现

文章目录1. 红黑树1.1 红黑树的概念1.2 红黑树的性质1.3 红黑树节点的定义1.4 红黑树的插入1.5 红黑树的验证1.6 红黑树与AVL树的比较1. 红黑树 1.1 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以…...

C/C++每日一练(20230310)

目录 1. 用栈实现队列 ★★ 2. 单词搜索 II ★★★ 3. 直线上最多的点数 ★★★ 1. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; v…...

Go语言基础知识

常量//定义方式 const a int12;//指定变量类型 const b12;//不指定变量类型&#xff0c;由编译时go自动确认 const(//多行定义方式a12b23 ) //说到const&#xff0c;不得不得不提到的一个参数iota,初始值为0&#xff0c;在用const多行定义的方式中&#xff0c; 如果第一行定义了…...

案例06-没有复用思想的接口和sql--mybatis,spring

目录一、背景二、思路&方案问题1优化问题2优化三、总结四、升华一、背景 写这篇文章的目的是通过对没有复用思想接口的代码例子优化告诉大家&#xff0c;没有复用思想的代码不要写&#xff0c;用这种思维方式和习惯来指导我们写代码。 项目中有两处没有复用思想代码&#…...

如何将项目部署到服务器:从选择服务器到维护应用程序的全流程指南

将项目部署到服务器是一个重要的技能&#xff0c;对于开发人员来说&#xff0c;它是必不可少的。在本文中&#xff0c;我将介绍一些关于如何将项目部署到服务器的最佳实践。一、选择服务器在部署项目之前&#xff0c;你需要先选择一个适合你的服务器。如果你已经有一个可用的服…...

怎么做才能不丢消息?

现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制&#xff0c;可以做到在消息传递的过程中&#xff0c;即使发生网络中断或者硬件故障&#xff0c;也能确保消息的可靠传递、不丢消息。 绝大部分丢消息的原因都是由于开发者不熟悉消息队列&#xff0c;没有正确使用…...

Cadence原理图网表导入Allegro PCB的5个关键步骤与避坑指南(2024最新版)

Cadence原理图网表导入Allegro PCB的5个关键步骤与避坑指南&#xff08;2024最新版&#xff09; 在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;Cadence和Allegro的协同工作流程是硬件工程师日常开发的核心环节。网表作为连接原理图设计与PCB布局的桥梁&#xf…...

OpenClaw对接Qwen3-VL:30B:飞书智能助手配置

OpenClaw对接Qwen3-VL:30B&#xff1a;飞书智能助手配置 1. 为什么选择这个组合&#xff1f; 去年我在团队内部尝试搭建一个能处理图片和文本的智能助手时&#xff0c;遇到了三个痛点&#xff1a;一是商业API调用成本太高&#xff0c;二是数据安全性无法保证&#xff0c;三是…...

s2-pro GPU算力适配实战:显存优化部署让语音合成延迟降低40%

s2-pro GPU算力适配实战&#xff1a;显存优化部署让语音合成延迟降低40% 1. 专业语音合成新选择 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它让高质量的文本转语音变得触手可及。与普通语音合成工具不同&#xff0c;s2-pro支持通过参考音频复用音色&#…...

MBPFan:解决MacBook Linux系统散热难题的智能温控工具

MBPFan&#xff1a;解决MacBook Linux系统散热难题的智能温控工具 【免费下载链接】mbpfan 项目地址: https://gitcode.com/gh_mirrors/mb/mbpfan 当你在Linux系统下使用MacBook处理文档、编写代码或观看视频时&#xff0c;是否遇到过设备突然发烫、风扇噪音忽大忽小的…...

从数组到哈夫曼树:用Python代码图解软考数据结构核心算法

从数组到哈夫曼树&#xff1a;Python实战软考核心数据结构 1. 线性结构的Python实现 1.1 顺序栈与队列的实现 Python的列表(list)天然适合实现顺序存储结构。我们先来看栈的实现&#xff1a; class ArrayStack:def __init__(self, capacity10):self._items []self._capacity …...

Vue 3 响应式系统的解构艺术:深入剖析 toRef 与 toRefs

Vue 3 响应式系统的解构艺术&#xff1a;深入剖析 toRef 与 toRefs 在 Vue 3 的 Composition API 中&#xff0c;响应式系统是其核心魅力之一。ref 和 reactive 为我们提供了强大的数据响应能力&#xff0c;但在实际开发中&#xff0c;尤其是在复杂的组件逻辑和组合式函数&…...

Llama-3.2V-11B-cot在智能教育中的应用:数学题配图逻辑漏洞识别实战

Llama-3.2V-11B-cot在智能教育中的应用&#xff1a;数学题配图逻辑漏洞识别实战 1. 引言&#xff1a;当AI遇见数学教育 数学教材和习题集中的配图错误是一个长期困扰教育行业的难题。据统计&#xff0c;约15%的数学教材配图存在不同程度的逻辑漏洞或表达偏差&#xff0c;这些…...

Vue3最新版二维码生成避坑指南:从基础配置到企业级定制(附GitHub源码)

Vue3企业级二维码生成实战&#xff1a;从核心原理到性能优化 二维码作为连接物理世界与数字世界的桥梁&#xff0c;在现代Web应用中扮演着重要角色。本文将带您深入Vue3的二维码生成技术栈&#xff0c;不仅涵盖基础实现&#xff0c;更聚焦企业级应用中的高阶技巧与性能优化方案…...

24/7运行指南:OpenClaw+GLM-4-7-Flash树莓派部署与看门狗配置

24/7运行指南&#xff1a;OpenClawGLM-4-7-Flash树莓派部署与看门狗配置 1. 为什么选择树莓派作为OpenClaw的宿主设备&#xff1f; 去年冬天&#xff0c;当我第一次尝试让OpenClaw在我的主力开发机上24小时运行时&#xff0c;遭遇了严重的资源冲突问题。半夜运行的自动化任务…...

大多数加密API都不够用:量化团队真正需要的数据到底是什么?

如果你做过加密相关开发&#xff0c;无论是&#xff1a; 量化交易数据平台研究分析风控系统 你大概率都会经历一个阶段&#xff1a; &#x1f449; API 接了一堆&#xff0c;但始终“不够用”。 常见的一个误区 很多人在刚开始做数据接入时&#xff0c;会觉得&#xff1a; …...