cs: add «725. Split Linked List in Parts»
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
2ee32d75a6
commit
87c2fb3895
1 changed files with 39 additions and 0 deletions
39
cs/split-linked-list-in-parts.cs
Normal file
39
cs/split-linked-list-in-parts.cs
Normal file
|
@ -0,0 +1,39 @@
|
|||
public class Solution {
|
||||
private int GetLength(ListNode node) {
|
||||
var count = 0;
|
||||
|
||||
for (; node != null; node = node.next) {
|
||||
++count;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
public ListNode[] SplitListToParts(ListNode tail, int k) {
|
||||
var parts = new ListNode[k];
|
||||
Array.Fill(parts, null);
|
||||
|
||||
var listLength = GetLength(tail);
|
||||
var (perPart, leftover) = (listLength / k, listLength % k);
|
||||
|
||||
for (var i = 0; i < k && tail != null; ++i) {
|
||||
var (node, length) = (tail, perPart);
|
||||
parts[i] = node;
|
||||
|
||||
if (leftover > 0) {
|
||||
++length;
|
||||
--leftover;
|
||||
}
|
||||
|
||||
// Add the regular part
|
||||
for (var j = 0; j < length - 1; ++j) {
|
||||
node = node.next;
|
||||
}
|
||||
|
||||
// Handle the last node in the part as a special case
|
||||
(tail, node.next) = (node.next, null);
|
||||
}
|
||||
|
||||
return parts;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue