打卡第七十七天
2道中等题
题目:

思路:

代码:
class Solution {
public:vector<ListNode*> splitListToParts(ListNode* head, int k) {int n = 0;ListNode *temp = head;while (temp != nullptr) { // 计算链表长度 nn++; // 计数增加temp = temp->next; // 移动到下一个节点}int quotient = n / k, remainder = n % k;// quotient = 每部分的基础长度,remainder = 前几部分需要多一个节点vector<ListNode*> parts(k, nullptr);// 创建结果数组,初始化 k 个空指针ListNode *curr = head; // 当前处理节点指针for (int i = 0; i < k && curr != nullptr; i++) {// 循环 k 次或直到链表结束parts[i] = curr; // 将当前部分的头节点存入结果数组int partSize = quotient + (i < remainder ? 1 : 0);// 前 remainder 个部分长度 = quotient + 1,其余部分长度 = quotientfor (int j = 1; j < partSize; j++) {// 遍历到当前部分的最后一个节点,j 从 1 开始,因为已经定位到第一个节点curr = curr->next;}ListNode *next = curr->next;// 保存下一部分的起始节点curr->next = nullptr;// 断开当前部分与后续部分的连接curr = next;// 移动到下一部分的起始节点}return parts; // 返回结果数组}
};
耗时≈一小时 明天继续