【leetcode】链表分割

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️


目录

  • [方法1. 不用哨兵位](#方法1. 不用哨兵位)
  • [方法2. 用哨兵位](#方法2. 用哨兵位)

点击查看题目

思路:

将链表分为2个链表list1和list2,list1是小于x的所有节点,list2是剩余的节点。最后将list1的最后一个节点指向list2的第一个节点

1

方法1. 不用哨兵位

c 复制代码
#include <csignal>
class Partition {
  public:
    ListNode* partition(ListNode* pHead, int x) {
        ListNode* list1 = nullptr;
        ListNode* i1 = nullptr;
        ListNode* list2 = nullptr;
        ListNode* i2 = nullptr;
        ListNode* cur = pHead;

        while (cur) {
            if (cur->val < x) {
                if (i1 == nullptr) {
                    i1 = list1 = cur;
                } else {
                    i1->next = cur;
                    i1 = i1->next;
                }
            } else {
                if (i2 == nullptr) {
                    i2 = list2 = cur;
                } else {
                    i2->next = cur;
                    i2 = i2->next;
                }
            }
            cur = cur->next;
        }
        if(list1==nullptr&&list2==nullptr)
            return nullptr;
        if(list1==nullptr&&list2!=nullptr)
            return list2;

        i1->next=list2;
        if(list2==nullptr)
            return list1;
        i2->next=nullptr;
        return list1;
    }
};

2

方法2. 用哨兵位

这种方法就不需要分多钟情况进行讨论,记得最后将开辟的空间释放掉,这是一个好习惯

c 复制代码
#include <csignal>
class Partition {
  public:
    ListNode* partition(ListNode* pHead, int x) {
        ListNode* list1,*i1,*list2,*i2,*cur;
        cur=pHead;
        list1=i1=(ListNode*)malloc(sizeof(ListNode));
        list2=i2=(ListNode*)malloc(sizeof(ListNode));
        while(cur)
        {
            if(cur->val<x){
                i1->next=cur;
                i1=i1->next;
            }
            else{
                i2->next=cur;
                i2=i2->next;
            }
            cur=cur->next;
        }
        i1->next=list2->next;
        i2->next=nullptr;
        pHead=list1->next;
        free(list1);
        free(list2);
        return pHead;
    }
};

好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

相关推荐
算法与编程之美2 小时前
提升minist的准确率并探索分类指标Precision,Recall,F1-Score和Accuracy
人工智能·算法·机器学习·分类·数据挖掘
MicroTech20252 小时前
微算法科技(NASDAQ :MLGO)混合共识算法与机器学习技术:重塑区块链安全新范式
科技·算法·区块链
李牧九丶2 小时前
从零学算法1334
前端·算法
在繁华处2 小时前
C语言经典算法:汉诺塔问题
c语言·算法
le serein —f2 小时前
用go实现-反转链表
leetcode·链表·golang
爪哇部落算法小助手3 小时前
每日两题day50
数据结构·c++·算法
curry____3034 小时前
基本算法(2025.11.21)
c++·算法
WWZZ20255 小时前
快速上手大模型:深度学习5(实践:过、欠拟合)
人工智能·深度学习·神经网络·算法·机器人·大模型·具身智能
司铭鸿5 小时前
图论中的协同寻径:如何找到最小带权子图实现双源共达?
linux·前端·数据结构·数据库·算法·图论
小年糕是糕手7 小时前
【C++】C++入门 -- 输入&输出、缺省参数
c语言·开发语言·数据结构·c++·算法·leetcode·排序算法