leetcode—5/27

1.分隔鏈表

給定一個鏈表和一個特定值x,對鏈表進行分隔,使得所有小於x的節點都在大於或等於x的節點之前。
你應當保留兩個分區中每個節點的初始相對位置。

思路:遍歷鏈表,碰到大於或等於目標值的,則將節點接在鏈表尾部

ListNode* partition(ListNode* head, int x) {
        ListNode* tail = head;
        
        ListNode* pre = new ListNode(0);
        pre -> next = head;
        
        ListNode* cur = head;
        
        head = pre;
        
        int num = 1;
        
        if(tail == nullptr || tail -> next == nullptr)
        {
            return head -> next;
        }
        while(tail -> next != nullptr)
        {
            num++;
            tail = tail -> next;
        }
        ListNode* end = tail;
        for(int i = 0; i < num; i++)
        {
            if(i == num - 1 && cur -> next == nullptr)
            {
                break;
            }
            if(cur -> val < x)
            {
                pre = cur;
                cur = cur -> next;
            }
            else
            {
                pre -> next = cur -> next;
                cur -> next = nullptr;
                tail -> next = cur;
                tail = tail -> next;
                cur = pre -> next;
            }
        }
        
        return head -> next;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章