大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
目录
- [方法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;
}
};
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️