题目来源:https://leetcode-cn.com/problems/split-linked-list-in-parts/

题目描述:

LeetCode725.分隔链表 

 

 解法描述:

对于这个题目,我们首先要计算出链表的总长度,和分隔成k个链表后,每个链表的长度。所以关键就在于怎么控制分隔后的每个链表长度,其他的问题就简单了。我们直接来看代码

代码如下:

class Solution {
public:
    	vector<ListNode*> splitListToParts(ListNode* root, int k) {
		vector<ListNode*> ret;
		ListNode* cur = root;
		int count = 0;
                //先遍历一遍链表计算出长度
		while (cur) {
			count++;
			cur = cur->next;
		}
		cur = root;
                //计算出分成k个链表后,每个链表至少有多长
		int size = count / k;
                //计算这个余数是为了计算每个链表长度是在size基础上+1还是+0
		int rem = count%k;
		for (int i = 0; i < k; ++i) {
			if (cur) {
				ListNode* Head = new ListNode(-1);
				ListNode* prev = Head;
                        //根据余数判断链表长度在size基础上+1还是+0
				for (int j = 0; j < size + (rem > 0?1:0); ++j) {
					prev->next = new ListNode(cur->val);
					prev = prev->next;
					cur = cur->next;
				}
                       
                //每次生成一根链表就要把余数减1,否则后续每个链表长度都会在size基础上+1
                rem--;
                //生成一根链表就把这个链表放到vector容器中
				ret.push_back(Head->next);
			}
            //如果原链表不够分隔,那么只能将null放入vector中
			else {
				ret.push_back(NULL);
			}
		}
		return ret;
	}
};

 

相关文章: