Partition List

Partition List_第1张图片
Partition List.png

解題思路 :

這題能復習到的地方很多 首先建立兩個 node 一個連接 val < x 的 node 另一個連接 val >= x 的 node 接著掃過 list 一遍把整個 list 用這兩個 node 連接好 最後把小的那邊的尾端連接在大的那邊的 head->next (兩邊的 head 都是 dummy 所以要避開)最後再把大的尾端連接的 node 設定為 nullptr 以確保 list 有乾淨切斷

C++ code :


class Solution {

public:

/**
 * @param head: The first node of linked list.
 * @param x: an integer
 * @return: a ListNode 
 */
ListNode *partition(ListNode *head, int x) {
    // write your code here
    ListNode *less = new ListNode(0);
    ListNode *greater = new ListNode(0);
    ListNode *less_cur = less;
    ListNode *greater_cur = greater;
    
    while(head)
    {
        if(head->val < x)
        {
            less_cur->next = head;
            less_cur = less_cur->next;
        }
        else
        {
            greater_cur->next = head;
            greater_cur = greater_cur->next;
        }
        head = head->next;
    }
    less_cur->next = greater->next;
    greater_cur->next = nullptr;
    return less->next;
}

};

你可能感兴趣的:(Partition List)