LeetCode 86 分割链表

地址 https://leetcode-cn.com/problems/partition-list/

题目描述

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,
使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。

示例 1:

LeetCode  86 分割链表

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]


示例 2:
输入:head = [2,1], x = 2
输出:[1,2]

提示:
链表中节点的数目在范围 [0, 200] 内
-100 <= Node.val <= 100
-200 <= x <= 200

算法1

主要是考虑链表的操作,
开启两个链表
一个存储比target小的元素
一个存储大约等于target的元素
遍历原链表,将元素分别放入格子的链表。
LeetCode  86 分割链表

C++ 代码

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* small = new ListNode(0);
        ListNode* smallHead = small;
        ListNode* large = new ListNode(0);
        ListNode* largeHead = large;
        while (head != nullptr) {
            if (head->val < x) {
                small->next = head;
                small = small->next;
            } else {
                large->next = head;
                large = large->next;
            }
            head = head->next;
        }
        large->next = nullptr;
        small->next = largeHead->next;
        return smallHead->next;
    }
};

我的视频题解空间

上一篇:多个公私钥管理


下一篇:小(大)顶堆排序