链表分割-双哨兵位

server/2025/2/12 18:52:54/

题目

现有一链表的头指针struct ListNode* pHead,给一定值x,编写一段代码将所有小于x的节点排在其余节点之前,且不能改变原来数据顺序,返回重新排列后的链表的头指针

示例:
pHead [1,5,2,7,3,4], x=5
输出 [1,2,3,4,5,7]

struct ListNode {int val;struct ListNode* next;
};struct ListNode* partition(struct ListNode* pHead, int x) {}

分析

思路:
创建两个新链表,分别存储小于x的节点和大于等于x的节点。将两个新链表链接起来成为新链表,返回新链表
流程:
注:(great->g; less->l)
创建两个哨兵位,用gGuard和lGuard指向。创建gTail和lTail指向大小链表尾。
创建cur指针遍历原链表,当cur->val<x时尾插到lTail->next;否则尾插到gTail->next。
最后pHead指针存储新链表头,链接大小链表(lTail->next = gGuard->next;),再将新链表结尾指向NULL(gTail->next = NULL;)。
释放哨兵位。
返回pHead。

代码

struct ListNode {int val;struct ListNode* next;
};struct ListNode* partition(struct ListNode* pHead, int x) {struct ListNode* gGuard, * gTail, * lGuard, * lTail;gGuard = gTail = (struct ListNode*)malloc(sizeof(struct ListNode));//创建哨兵位lGuard = lTail = (struct ListNode*)malloc(sizeof(struct ListNode));//创建哨兵位gTail->next = lTail->next = NULL;struct ListNode* cur = pHead;while (cur){if (cur->val < x){lTail->next = cur;lTail = lTail->next;}else{gTail->next = cur;gTail = gTail->next;}cur = cur->next;}gTail->next = NULL;lTail->next = gGuard->next;pHead = lGuard->next;free(gGuard);free(lGuard);return pHead;
}

本题若使用不带头单链表,会遇到很为NULL的情况,使用哨兵位可以避免这个问题。


http://www.ppmy.cn/server/167124.html

相关文章

深入解析:如何利用 Python 爬虫获取商品 SKU 详细信息

在电商领域&#xff0c;SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;详细信息是电商运营的核心数据之一。它不仅包含了商品的规格、价格、库存等关键信息&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。本文将详细介绍如何利用 Pyth…

我用AI做数据分析之数据清洗

我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样&#xff1f; 这里描述自己在使用AI进行数据分析&#xff08;数据清洗&#xff09;过程中的几个小故事&#xff1a; 1. 变量名的翻译 有一个项目是某医生自己收集的数据&#xff0c;变量名使用的是中文&#xff0c;分…

Unity Shader Graph 2D - Procedural程序化形状之波形

在Unity Shader Graph中,可以通过节点来构建一些程序化的图形形状,本文将通过使用Shader Graph中的节点来创建一个圆状的波形动画图形,从而进一步的来实践和应用Shader Graph的节点。 创建基础的圆状波形图 需要使用到的节点有Polar Coordinates即极坐标,该坐标以半径为X轴…

面试经典150题——字典树

文章目录 1、实现 Trie (前缀树)1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、添加与搜索单词 - 数据结构设计2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、单词搜索 II3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 对于字典树而言&#xff0c;之前做过…

判断192.168.1.0/24网络中,当前在线的ip有哪些

需求&#xff1a;判断192.168.1.0/24网络中&#xff0c;当前在线的ip有哪些&#xff0c;并编写脚本打印出来。 [rootopenEuler ~]# cat 1.sh #!/bin/bash for ip in $(seq 1 254); do ping -c 1 -W 1 "192.168.1.$ip" > /dev/null 2>&1 if [ $? …

DeepSeek-Coder系列模型:智能编程助手的未来

文章目录 一、模型架构与核心功能1. 模型架构2. 核心功能 二、多语言支持与代码生成1. Python代码生成2. Java代码生成3. C代码生成4. JavaScript代码生成 三、仓库级代码理解1. 代码结构分析2. 上下文理解 四、FIM填充技术1. 函数自动填充2. 代码补全 五、应用场景1. 代码补全…

设计模式-结构型-外观模式

在软件开发中&#xff0c;随着功能的不断迭代&#xff0c;系统会变得越来越复杂&#xff0c;模块之间的依赖关系也会越来越深。这种复杂性会导致代码难以理解、维护和扩展。而外观模式&#xff08;Facade Pattern&#xff09;正是为了解决这一问题而生的。 一、外观模式简介 …

二分算法篇:二分答案法的巧妙应用

二分算法篇&#xff1a;二分答案法的巧妙应用 那么看到二分这两个字想必我们一定非常熟悉&#xff0c;那么在大学期间的c语言的教学中会专门讲解二分查找&#xff0c;那么我们来简单回顾一下二分查找算法&#xff0c;我们知道二分查找是在一个有序的序列中寻找一个数在这个序列…