1. 程式人生 > 實用技巧 >luoguP1040 [NOIP2003]加分二叉樹

luoguP1040 [NOIP2003]加分二叉樹

要求:給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。
你應當保留兩個分割槽中每個節點的初始相對位置。

[https://leetcode-cn.com/problems/partition-list/](LeetCode 86)

//方法: 利用建立兩個頭指標

class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head==NULL)
return NULL;

    ListNode* less_head=new ListNode(0);//less_head->val=0;less_head->next=NULL;
    ListNode* more_head=new ListNode(0);
    ListNode* pLessTail=less_head;
    ListNode* pMoreTail=more_head;
    
    while(head){
        if(head->val<x){
            pLessTail->next=head;//if val<x; link Less_X;
            pLessTail=head;//後移
        }
        else if(head->val>=x){
            pMoreTail->next=head;//if val>=x; link More_X;
            pMoreTail=head;//後移
            }
        head=head->next;  
    }
    pMoreTail->next=NULL;//尾置空
    pLessTail->next=more_head->next;//Less_X link More_X
    return less_head->next;//less頭節點為空
}

};