使用双链表来分隔原始链表

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

分隔链表


题目描述


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


你应当 保留 两个分区中每个节点的初始相对位置。原题链接


示例


示例 1:


6bb1f0b16d1a4f0da18c52d96045bdc2.png


输入: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的链表,训练遍历原始链表后将其添加到新建的两个链表中,参考代码如下所示:


ListNode* partition(ListNode* head, int x) {
    ListNode* temp=new ListNode(0);
    ListNode* low=temp;
    ListNode* _temp=new ListNode(0);
    ListNode* big=_temp;
    ListNode* cur=head;
    while(cur!=nullptr){
        if(cur->val<x){
            low->next=cur;
            low=low->next;
        }
        else{
            big->next=cur;
            big=big->next;
        }
        cur=cur->next;
    }
    // 添加尾节点
    big->next=nullptr;
    low->next=_temp->next;
    return temp->next;
}


算法效果


ca60ea319f07418dbc7278d9ab530bfd.png

目录
相关文章
|
5月前
|
存储 算法
LeetCode第86题分隔链表
文章介绍了LeetCode第86题"分隔链表"的解法,通过创建两个新链表分别存储小于和大于等于给定值x的节点,然后合并这两个链表来解决问题,提供了一种简单易懂且操作原链表的解决方案。
LeetCode第86题分隔链表
|
5月前
|
存储 Python
【Leetcode刷题Python】86.分隔链表
通过使用两个虚拟节点(dummy nodes)来分别收集小于特定值 x 的节点和大于等于 x 的节点,最终将这两部分链表合并起来形成结果链表。
37 0
|
7月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
8月前
特殊链表(循环单链表,循环双链表,静态链表)
特殊链表(循环单链表,循环双链表,静态链表)
64 3
|
8月前
|
缓存 算法 搜索推荐
【数据结构】链表(单链表与双链表实现+原理+源码)
【数据结构】链表(单链表与双链表实现+原理+源码)
|
8月前
|
Go 算法 Java
Golang每日一练(leetDay0029) 最大矩形、分隔链表、扰乱字符串
Golang每日一练(leetDay0029) 最大矩形、分隔链表、扰乱字符串
57 0
Golang每日一练(leetDay0029) 最大矩形、分隔链表、扰乱字符串
|
8月前
leetcode-86:分隔链表
leetcode-86:分隔链表
47 0
|
8月前
|
Go
golang力扣leetcode 86.分隔链表
golang力扣leetcode 86.分隔链表
41 0
|
7月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
7月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
66 2

热门文章

最新文章