分隔链表

题目链接:分隔链表


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<ListNode*> splitListToParts(ListNode* root, int k) {

        vector<ListNode*> vc;
        //首先求出链表的长度
        int len = 0;
        ListNode *p,*q,*r,*pre;
        for(p=root;p!=NULL;p=p->next,len++);
        
        int num = len/k;    //每组分配多少个结点
        int rem = len%k;    //多余多少个结点


        ListNode* cur = root;
        pre = cur;
        for(int i=0;i<k;i++){
            ListNode* head = cur;
            pre = cur;  //

            for(int j=0;j< num + (i<rem?1:0);j++){  //控制每个组分配多少个结点,按照顺序,最多多一个且从左到右开始
                if(cur){    
                    pre = cur;  //记录尾结点,方便断开链表
                    cur = cur->next;
                }
            }
            if(pre){    //空指针
                pre->next = NULL;
            } 
            vc.push_back(head);
        }
        return vc;
    }
};
posted @ 2020-09-26 10:21  focusDing  阅读(70)  评论(0编辑  收藏  举报