725. 分隔連結串列
阿新 • • 發佈:2022-01-11
給你一個頭結點為 head 的單鏈表和一個整數 k ,請你設計一個演算法將連結串列分隔為 k 個連續的部分。
每部分的長度應該儘可能的相等:任意兩部分的長度差距不能超過 1 。這可能會導致有些部分為 null 。
這 k 個部分應該按照在連結串列中出現的順序排列,並且排在前面的部分的長度應該大於或等於排在後面的長度。
返回一個由上述 k 部分組成的陣列。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/split-linked-list-in-parts
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
心之所向,素履以往 生如逆旅,一葦以航class Solution { private int count(ListNode head) { int ans = 0; ListNode cur = head; while (cur != null) { ans++; cur = cur.next; } return ans; } public ListNode[] splitListToParts(ListNode head, int k) { ListNode[] ans = new ListNode[k]; int count = count(head); int add = count % k; int num = count / k; int index = 0; int cnt = 0; int need = num + (index < add ? 1 : 0); ListNode left = head; ListNode cur = head; while (cur != null) { ListNode next = cur.next; cnt++; if (cnt == need) { ans[index++] = left; cur.next = null; left = next; need = num + (index < add ? 1 : 0); cnt = 0; } cur = next; } return ans; } } class ListNode { int val; ListNode next; ListNode() { } ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } }