725. Split Linked List in Parts
C++
class Solution {
public:
vector<ListNode*> splitListToParts(ListNode* head, int k) {
int n = 0;
for (ListNode* cur = head; cur != nullptr; cur = cur->next) {
++n;
}
int cnt = n / k, mod = n % k;
vector<ListNode*> ans(k, nullptr);
ListNode* cur = head;
for (int i = 0; i < k && cur != nullptr; ++i) {
ans[i] = cur;
int m = cnt + (i < mod ? 1 : 0);
for (int j = 1; j < m; ++j) {
cur = cur->next;
}
ListNode* nxt = cur->next;
cur->next = nullptr;
cur = nxt;
}
return ans;
}
};JAVA
class Solution {
public ListNode[] splitListToParts(ListNode root, int k) {
int n = 0;
ListNode cur = root;
while (cur != null) {
++n;
cur = cur.next;
}
int width = n / k, remainder = n % k;
ListNode[] res = new ListNode[k];
cur = root;
for (int i = 0; i < k; ++i) {
ListNode head = cur;
for (int j = 0; j < width + ((i < remainder) ? 1 : 0) - 1; ++j) {
if (cur != null) {
cur = cur.next;
}
}
if (cur != null) {
ListNode t = cur.next;
cur.next = null;
cur = t;
}
res[i] = head;
}
return res;
}
}
Comments
Post a Comment