1. 題目
2. 解答
從前向後遍歷連結串列,將結點值小於 x 的結點放入到新連結串列 1 中,將結點值大於等於 x 的結點放入新連結串列 2 中。最後,將新連結串列 2 拼接在新連結串列 1 後面即可。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if (head == NULL || head->next == NULL) return head;
ListNode *new_head1 = new ListNode(0); // 新建哨兵結點方便操作
ListNode *temp1 = new_head1;
ListNode *new_head2 = new ListNode(0); // 新建哨兵結點方便操作
ListNode *temp2 = new_head2;
while (head)
{
if (head->val < x) // 小於 x 的結點放入新連結串列 1
{
temp1->next = head;
temp1 = head;
}
else // 大於等於 x 的結點放入新連結串列 2
{
temp2->next = head;
temp2 = head;
}
head = head->next;
}
temp1->next = new_head2->next;
temp2->next = NULL;
return new_head1->next;
}
};
獲取更多精彩,請關注「seniusen」!