題目連結:
題目意譯:
給定一個連列串列(Linked List)的頭 head 以及一個值 x,將其切分變為所有節點值小於 x 的排在所有值大於等於 x 之節點的前面。
你應在兩個切割部分中各自保持著原有的節點相對順序。
限制:
串列中的節點數位於範圍 [0, 200] 中。
-100 ≦ Node.val ≦ 100
-200 ≦ x ≦ 200
範例測資:
範例 1:
輸入: head = [1,4,3,2,5,2], x = 3
輸出: [1,2,2,4,3,5]
範例 2:
輸入: head = [2,1], x = 2
輸出: [1,2]
解題思維:
令兩個新的節點 d1 、 d2 分別作為 < x 的節點之串列開頭和 ≧ x 之串列開頭(這兩個開頭是暫存用,不會出現於答案中),以及另外兩個指標 r1 、 r2 用來分別指向 d1 、 d2 這兩個串列的結尾。
接著掃過給定的串列中所有節點。
當目前節點 node,其 node->val < x 時,我們需要將 node 放到 d1 的結尾,因此 r1->next 要設為 node、r1 接著再指到 node;反之,node->val ≧ x,則將 node 放到 d2 結尾,因此 r2->next 要設為 node 、 r2 接著再指到 node。
最後,因為兩個串列要合併,所以 r1->next 設為 d2.next、r2->next 設為空節點(確保結尾沒有指到別的節點)。
此時,d1.next 即是所求的切分後之串列。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。