1. 程式人生 > 其它 >725. 分隔連結串列

725. 分隔連結串列

給你一個頭結點為 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;
    }
}
心之所向,素履以往 生如逆旅,一葦以航