leetcode725-Split Linked List in Parts

题目

给你一个头结点为 head 的单链表和一个整数 k ,请你设计一个算法将链表分隔为 k 个连续的部分。
每部分的长度应该尽可能的相等:任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。
这 k 个部分应该按照在链表中出现的顺序排列,并且排在前面的部分的长度应该大于或等于排在后面的长度。
返回一个由上述 k 部分组成的数组。
示例 1:
输入:head = [1,2,3], k = 5
输出:[[1],[2],[3],[],[]]
解释:
第一个元素 output[0] 为 output[0].val = 1 ,output[0].next = null 。
最后一个元素 output[4] 为 null ,但它作为 ListNode 的字符串表示是 [] 。

分析

既然要分成k组,那么确认好每组的元素个数就可以了(总元素/k即可),因为不是均分,所以需要把余数(总元素%k)按照1分摊到每组里

public class LinkNode {
	int val;
	LinkNode next;

	public LinkNode(int data) {
		this.val = data;
		this.next = null;
	}
}
public class LinkList {
	LinkNode head;
	public LinkList() {
		this.head = null;
	}
	public LinkNode getHead() {
		return this.head;
	}
	//添加元素
	public void addNode(int data) {
		LinkNode node = new LinkNode(data);
		if (this.head == null) {
			this.head = node;
		} else {
			LinkNode cur = this.head;
			while(cur.next != null) {
				cur = cur.next;
			}
			cur.next = node;
		}
	}
	//正序打印
	public void print(LinkNode node) {
		while(node != null) {
			System.out.print(node.val);
			System.out.print(" ");
			node = node.next;
		}
		System.out.println();
	}
	public void split(int k) {
		int cnt = 0;
		LinkNode p = this.head;
		while(p != null) {
			cnt++;
			p = p.next;
		}
		int divRes = cnt / k;
		int divRest = cnt % k;
		p = this.head;
		LinkNode[] splitArray = new LinkNode[k];
		for(int i = 0;i<k && p != null;i++) {
			splitArray[i] = p;
			int tot = 0;
			if(i<divRest) {
				tot = divRes + 1;
			} else {
				tot= divRes;
			}
			for(int j = 1;j<tot;j++) {
				p = p.next;
			}
			LinkNode t = p.next;
			p.next = null;
			p = t;
		}
		for(int i = 0;i<k;i++) {
			LinkNode newHead = splitArray[i];
			print(newHead);
		}
	}
}
public class splitLinkedListinParts {
	public static void main(String[] args) {
		LinkList list = new LinkList();
		list.addNode(1);
		list.addNode(2);
		list.addNode(3);
		list.addNode(4);
		list.addNode(5);
		list.addNode(6);
		list.addNode(7);
		list.addNode(8);
		list.addNode(9);
		list.addNode(10);
		list.split(3);
	}
}

相关推荐

  1. leetcode725-Split Linked List in Parts

    2024-05-25 18:28:11       33 阅读
  2. leetcode705-Design HashSet

    2024-05-25 18:28:11       207 阅读
  3. LeetCode 727. 菱形

    2024-05-25 18:28:11       31 阅读
  4. LeetCode 75| 前缀和

    2024-05-25 18:28:11       57 阅读
  5. LeetCode 75| 位运算

    2024-05-25 18:28:11       57 阅读
  6. LeetCode75| 队列

    2024-05-25 18:28:11       56 阅读
  7. LeetCode75| 单调栈

    2024-05-25 18:28:11       68 阅读
  8. LeetCode 75 颜色分类

    2024-05-25 18:28:11       38 阅读
  9. Leetcode 75. 颜色分类

    2024-05-25 18:28:11       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-25 18:28:11       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-25 18:28:11       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-25 18:28:11       82 阅读
  4. Python语言-面向对象

    2024-05-25 18:28:11       91 阅读

热门阅读

  1. 加载页面 跳转 新页面 vue

    2024-05-25 18:28:11       41 阅读
  2. 前端框架选择指南:React vs Vue vs Angular

    2024-05-25 18:28:11       33 阅读
  3. 设计模式--策略模式

    2024-05-25 18:28:11       32 阅读
  4. React hooks - useRef

    2024-05-25 18:28:11       34 阅读
  5. MybatisPlus优雅实现加密?

    2024-05-25 18:28:11       33 阅读
  6. arm-day6控制灯

    2024-05-25 18:28:11       34 阅读
  7. Apache Doris 2.1.3 版本正式发布!

    2024-05-25 18:28:11       30 阅读
  8. 【前端每日基础】day30

    2024-05-25 18:28:11       30 阅读
  9. 二叉树的序列化---广义表

    2024-05-25 18:28:11       36 阅读
  10. go全部版本下载目录

    2024-05-25 18:28:11       32 阅读