086. Partition List
2024-08-24 09:19:44
题目链接:https://leetcode.com/problems/partition-list/description/
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
Example:
Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5
思路:
- 根据题目所述,要求将链表中小于x(< x )的结点放在链表的左侧,大于等于x(>= x)的结点放置在链表的右侧;并且要求元素的相对顺序保持不变。
- 最直观的想法就是遍历链表,将元素中大于等于x(>= x)的结点拎出来,组成一个新的链表;当对原始链表遍历完成后,将拎出来的新链表插入到处理后的原始链表的后面即可。
注意:上面描述的是将大于等于x(>= x)的结点拎出来,也可将小于x(< x)的结点拎出来,两者处理过程基本一样。只是组合成所求链表时插入位置不同。
编码如下:
/**
* 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) {
if (head == nullptr) return head; // 链表为空,则直接返回 // 操作原始链表的准备工作
// 包括创建一个辅助结点指向链表的头结点
ListNode *pHead = new ListNode(-);
pHead->next = head;
ListNode *pre = pHead; // pre指向遍历到的结点的前驱结点
ListNode *cur = head; // cur指向遍历到的当前结点(即待处理结点) // 创建指向大于等于x(>= x ) 结点的链表
// 用pNew指针指向该链表的头结点,pNew为辅助结点
ListNode *pNew = new ListNode(-);
ListNode *ptrNew = pNew; // 对原始链表进行遍历
while (cur != nullptr)
{
if (cur->val >= x) // 将原始链表中大于等于x(>= x)的结点分离出来,形成新的链表
{
ListNode *pTemp = cur;
pre->next = pTemp->next;
cur = cur->next; ptrNew->next = pTemp;
ptrNew = ptrNew->next;
ptrNew->next = nullptr;
}
else // 对于原始链表中小于x(< x)的结点,移动指针指向即可。
{
pre = cur;
cur = cur->next;
}
} // 将两部分连接起来
// 将原始链表中小于x(< x)的部分和原始链表中大于等于x(>= x)的部分连接起来
pre->next = pNew->next;
head = pHead->next; // 释放辅助结点内存空间
delete pHead;
delete pNew; return head;
}
};
最新文章
- Thinking in Unity3D:材质系统概览
- 一张图告诉你,只会HTML还不够!
- 宏碁台式机,如何设置u盘启动
- 挖一挖C#中那些我们不常用的东西之系列(1)——ToDictionary,ToLookup
- Ubuntu安装出现左上角光标一直闪解决方式
- 升级vs工程到vs2010(以上)工程找不到OutputDebugStr报错
- 《慕客网:IOS-动画入门》学习笔记
- [BZOJ 1483][HNOI 2009]梦幻补丁(有序表启发式合并)
- JavaScript - prototype 和 call 的理解
- mysql procedure返回多数据集
- hdu_5950_Recursive sequence(矩阵快速幂)
- JAVA上传与下载
- IT连创业系列:说说苹果商店AppStore上架App应用前后遇到的那些神坑
- spring集成shiro登陆流程(下)
- Java——IO流 对象的序列化和反序列化流ObjectOutputStream和ObjectInputStream
- SpringBoot(11) SpringBoot自定义拦截器
- Robotics Tools
- Status: Checked in and viewable by authorized users 出现在sharepoint 2013 home 页面
- vue2之对象属性的监听
- js formData图片上传(单图上传、多图上传)后台java