LeetCode 86 ——分隔連結串列

seniusen發表於2018-11-14

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」!

相關文章