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分摊到每组里

java 复制代码
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);
	}
}
相关推荐
qmx_0727 分钟前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
X同学的开始30 分钟前
数据结构之二叉树遍历
数据结构
为风而战35 分钟前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
AIAdvocate4 小时前
Pandas_数据结构详解
数据结构·python·pandas
jiao000014 小时前
数据结构——队列
c语言·数据结构·算法
kaneki_lh4 小时前
数据结构 - 栈
数据结构
铁匠匠匠4 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond4 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习