分隔链表--均分链表指针返回
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分隔链表--均分链表指针返回相关的知识,希望对你有一定的参考价值。
题目
解题分析
均分,再均分就行。
- 拓展:
可以用数组记录每个链表的指针,然后能够快速进行操作。
解题代码
我的蹩脚代码
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* head, int k) {
int n = count(head);
int c = n/k; int remainder = n%k;
vector<int>cap(k,c);
int index = 0;
while(remainder){
cap[index%k] += 1;
index++;
remainder--;
}
int cnt = 0,sum = cap[0];
vector<ListNode*>res;
res.push_back(head);
ListNode* t = head;
while(cnt!=k-1){
if(sum>0)
sum--;
if(sum==0){
cnt++;
ListNode* temp = t;
if(temp){
t = temp->next;
temp->next = nullptr;
}
res.push_back(t);
sum += cap[cnt];
}
else if(t){
t = t->next;
}
}
return res;
}
int count(ListNode* head){
if(!head)
return 0;
return count(head->next)+1;
}
};
官方yyds代码
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* head, int k) {
int n = 0;
ListNode *temp = head;
while (temp != nullptr) {
n++;
temp = temp->next;
}
//由于链表被分为k份,而remainder是n%k,肯定小于k,所以每一份最多加上1.
int quotient = n / k, remainder = n % k;
vector<ListNode*> parts(k,nullptr);
ListNode *curr = head;
for (int i = 0; i < k && curr != nullptr; i++) {
parts[i] = curr;
int partSize = quotient + (i < remainder ? 1 : 0); //计算每一份的长度
for (int j = 1; j < partSize; j++) {
curr = curr->next; //跳转到需要更改的指针处
}
ListNode *next = curr->next; //修改指针隔开
curr->next = nullptr;
curr = next;
}
return parts;
}
};
以上是关于分隔链表--均分链表指针返回的主要内容,如果未能解决你的问题,请参考以下文章
返回中间节点;返回倒数k节点;判断是否为环形链表(返回入环第一个节点)