中難易度357
リンクリストと特定の値を指定し て、 以下のすべてのノードが以上のノードの前に表示される ように、リンクリストを分離してください 。
x
x
x
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;
}
};
案の定、中級レベルの質問をするのはもっと幸せです!まだ学んでいます!いい加減にして!