[LeetCode] C ++:中間質問-リンクリスト86.個別のリンクリスト

86.個別のリンクリスト

中難易度357

リンクリストと特定の値を指定し て、 以下のすべてのノードが以上のノードの前に表示される ように、リンクリストを分離してください  。 xxx

2つのパーティションの各ノードの初期相対位置を維持する必要があります。

 

例:

入力:ヘッド= 1-> 4-> 3-> 2-> 5-> 2、x = 3
出力: 1-> 2-> 2-> 4-> 3-> 5

元々のアイデアは、スタックを使用してサイズの値を格納することでしたが、その後タイムアウトしました。

それから解決策をちらっと見ました、ああ理解してください!

xより小さいノードとxより大きいノードは、2つのサブリンクリストに形成され、最後にサブチェーンがリンクされます。一時的なノードストレージを宣言する必要はありません。ノード挿入を使用するだけです。

/**
 * 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* small = new ListNode(0);
        ListNode* smallHead = small;
        ListNode* large = new ListNode(0);
        ListNode* largeHead = large;

        while(head != nullptr){
            if(head->val < x){
                small->next = head;
                small = small->next;
            }else{
                large->next = head;
                large = large->next;
            }
            head = head->next;
        }
        large->next = nullptr;
        small->next = largeHead->next;
        return smallHead->next;
    }
};

案の定、中級レベルの質問をするのはもっと幸せです!まだ学んでいます!いい加減にして!

おすすめ

転載: blog.csdn.net/weixin_44566432/article/details/113529806