大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
目录
- 方法1. 不用哨兵位
- 方法2. 用哨兵位
点击查看题目
思路:
将链表分为2个链表list1和list2,list1是小于x的所有节点,list2是剩余的节点。最后将list1的最后一个节点指向list2的第一个节点
1
方法1. 不用哨兵位
#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. 用哨兵位
这种方法就不需要分多钟情况进行讨论,记得最后将开辟的空间释放掉,这是一个好习惯
#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;}
};
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️