力扣面试题02.04分割链表

1、面试pdd链表这一块还是不太熟练,尤其断掉重连

看力扣这一道例题,题意有点不好理解就是把小的放在5前面就可以

力扣面试题02.04分割链表_第1张图片

1、快速排序思想的解法

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        if(head == nullptr || head->next == nullptr)
        {
            return head;
        }
        vectorv;
        while(head)
        {
            v.push_back(head);
            head = head->next;
        }
        int minidx = -1;
        for(int i = 0; i < v.size(); i++)
        {
            if(v[i]->val < x)
            {
                swap(v[i],v[++minidx]);//这里和快排思想一样
            }
        }

        for(int i = 0; i < v.size() - 1; i++)
        {
            v[i]->next = v[i+1];
        }
        v[v.size()-1]->next = nullptr;
        return v[0];
    }
};

2、 或者使用双指针解法

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* p = head;
        ListNode* q = head;
        while(p)
        {
            if(p->val < x)
            {
                int tmp = q->val;
                q->val = p->val;
                p->val = tmp;
                q = q->next;
            }
            p = p->next;
        }
        return head;
    }
};

 

你可能感兴趣的:(#,链表)