分割連結串列

903419發表於2020-12-06

題目描述:
給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。

你應當保留兩個分割槽中每個節點的初始相對位置。

示例:

輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5

連結:https://leetcode-cn.com/problems/partition-list/

思路分析:比x節點值大,在右邊,比x節點值小,在左邊。

  1. 先開闢兩個節點,用於儲存左右節點的首節點。
  2. 遍歷連結串列,然後比較,小的放左邊,大的放右邊。

例如:

在這裡插入圖片描述

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        if(head == nullptr)
            return nullptr;
        ListNode* min = new ListNode;//小於
        ListNode* max = new ListNode;//大於等於
        ListNode* p = min;//小於
        ListNode* q = max;//大於等於
        while(head != nullptr)
        {
            if(head->val >= x)
            {
                max->next = head;
                max = head;
            }
            else
            {
                min->next = head;
                min = head;
            }
            head = head->next;
        }
        max->next = nullptr;
        min->next = q->next;
        head = p->next;
        delete p;
        delete q;
        return head;
    }
};

相關文章