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;
    }
}
posted @   Tianyiya  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示