方法一
实现思路
本质就是小的元素在一个链表中管理,大于等于的在另一个链表中都被管理,当遍历完原始的指针之后,将两个链表拼接到一起
实现代码
/**
* Definition for singly-linked list.
* 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) {
ListNode *sbe=head,*small=nullptr,*big=nullptr,*be=nullptr;
int f1=0,f2=0;
while(head!=nullptr){
ListNode *n=head->next;
if(head->val<x) {
if(!f1){
sbe=head;
f1=1;
}
if(small!=nullptr)
small->next=head;
small=head;
small->next=nullptr;
}
else{
if(!f2){
be=head;
f2=1;
}
if(big!=nullptr)
big->next=head;
big=head;
big->next=nullptr;
}
head=n;
}
if(small!=nullptr)
small->next=be;
return sbe;
}
};
提交结果及分析
时间复杂度O(n)
提示:这里简述项目相关背景:
例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)