【LeetCode86】-分隔链表

方法一

实现思路

在这里插入图片描述
在这里插入图片描述本质就是小的元素在一个链表中管理,大于等于的在另一个链表中都被管理,当遍历完原始的指针之后,将两个链表拼接到一起

实现代码

/**
 * 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 传输一批传感器数据(不是很大)


猜你喜欢

转载自blog.csdn.net/weixin_44944046/article/details/113005824