Leetcode 86. 分隔链表

题目链接:

86. 分隔链表 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/partition-list/description/


题目:

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

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

例:

例1:

输入:

        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


思路:

实现读题,题目要求我们将链表节点val值小于目标值x的节点放在第一个大于或等于x值的节点前。(一开始做这题我看成了将val值小于x的节点放在大于该val值前,害的我WA了好几次,所以说要好好读题)

那么我们可以设置两种头节点(big_head和small_head)分别用于存储val值大于等于x的节点和val值小于x的节点。再设置一个指针now指向head节点,表示当前指向的节点;一个指针small指向val值小于x的链表尾部(small_head);一个指针big指向val大于等于x的链表尾部(big_head)。

接着循环遍历每个节点即可,让val值大于等于x的节点接在big后,然后让big指向big的下一个节点;让val值小于x的节点接在small后,然后让small指向small的下一个节点即可。

最后,让small的next指向big_head的下一个节点(即重新连接两个链表变成一个链表),返回指针small_head的next指向的地址即可。


AC代码:

struct ListNode {
    int val;
    ListNode* next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode* next) : val(x), next(next) {}
};

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        if (head == nullptr || head->next == nullptr) {
            return head;
        }
        ListNode* big_head = new ListNode(0);
        ListNode* small_head = new ListNode(0);
        ListNode* big = big_head;
        ListNode* small = small_head;
        ListNode* now = head;
        while (now != nullptr) {
            if (now->val < x) {
                small->next = now;
                small = small->next;
            }
            else {
                big->next = now;
                big = big->next;
            }
            now = now->next;
        }
        small->next = big_head->next;
        big->next = nullptr;
        return small_head->next;
    }
};


如果我的文章对你有所帮助,不妨给我个关注何点赞吧。

相关推荐

  1. 【力扣】86. 分隔

    2024-04-23 19:02:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 19:02:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 19:02:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 19:02:01       82 阅读
  4. Python语言-面向对象

    2024-04-23 19:02:01       91 阅读

热门阅读

  1. VUE发展方向的文章

    2024-04-23 19:02:01       106 阅读
  2. CUDA编程:其四、CUDA矩阵乘法

    2024-04-23 19:02:01       35 阅读
  3. v-deep 打破作用域隔离的原理

    2024-04-23 19:02:01       37 阅读
  4. nginx的location

    2024-04-23 19:02:01       158 阅读
  5. Linux动静态库

    2024-04-23 19:02:01       33 阅读
  6. 在Linux上使用MySQL Yum存储库安装MySQL

    2024-04-23 19:02:01       36 阅读
  7. 【堆】Leetcode 295. 数据流的中位数【困难】

    2024-04-23 19:02:01       36 阅读
  8. 深度解析:PCBA代工代料的关键因素与选择技巧

    2024-04-23 19:02:01       35 阅读
  9. c++程序员通用成长规划

    2024-04-23 19:02:01       37 阅读
  10. vue中使用自定义组件规则

    2024-04-23 19:02:01       36 阅读