LeetCode 725 分割链表

模拟,先计算平均每段链表的长度,在计算前面有几段偏长的链表,最后进行分割。 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    vector splitListToParts(ListNode* head, int k) {
        int n = 0;
        ListNode* trans = head;
        while(trans != nullptr){
            n++;
            trans = trans ->next;
        }

        int ave = n / k;
        int pre = n % k;
        vector ans;
        ListNode* temp = nullptr;
        trans = head;
        int time = ave;

        while(pre--){
            time = ave;
            ListNode* p = trans;
            while(time-- && trans != nullptr){
                trans = trans->next;
            }
            temp = trans;
            trans = trans ->next;
            temp ->next = nullptr;
            ans.push_back(p);            
        }

        while(trans != nullptr){
            time = ave - 1;
            ListNode* p = trans;
            while(time-- && trans != nullptr){
                trans = trans->next;
            }
            temp = trans;
            trans = trans ->next;
            temp ->next = nullptr;
            ans.push_back(p); 
        }
        time = k - ans.size();
        while(time--) ans.push_back(nullptr);
        return ans;
    }
};

你可能感兴趣的:(#,LeetCode每日一题,#,链表,链表,leetcode)