刚开始题目没仔细看以为是间隔的放在一组,白写了一串代码,甚至还通过了二十几个测试样例…
重新看题之后思路很快就出来了,但是想了想能否只遍历一次,结果是没有想到什么好方法,按照常规方法写出来代码第一遍交错误,因为第一次遍历统计数量结束忘记重置指针至头节点了,改正后一遍过,思路和题解也是一样的。
打卡打卡!
class Solution
{
public:
vector<ListNode *> splitListToParts(ListNode *head, int k)
{
int n = 0;
vector<ListNode *> res(k);
if (head == nullptr)
return res;
for (int i = 0; i < k; i++)
{
res[i] = nullptr;
}
ListNode *p = head;
while (p->next != nullptr)
{
n++;
p = p->next;
}
p = head;
int cnt = n % k;
int x = n / k;
for (int i = 0; i < k && p != nullptr; i++)
{
if (i <= cnt)
{
res[i] = p;
for (int j = 0; j < x; j++)
{
p = p->next;
}
ListNode *q = p;
p = p->next;
q->next = nullptr;
}
else
{
res[i] = p;
for (int j = 0; j < x - 1; j++)
{
p = p->next;
}
ListNode *q = p;
p = p->next;
q->next = nullptr;
}
}
return res;
}
};