代做通一样的网站,wordpress 绿色版,网站备案号在哪儿查询,宣武上海网站建设题目
给你一个头结点为 head 的单链表和一个整数 k #xff0c;请你设计一个算法将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等#xff1a;任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。 这 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;ik p ! null;i) {splitArray[i] p;int tot 0;if(idivRest) {tot divRes 1;} else {tot divRes;}for(int j 1;jtot;j) {p p.next;}LinkNode t p.next;p.next null;p t;}for(int i 0;ik;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);}
}