题目描述:
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
官方题解写的很简单移动,换个想法,如果用集合的话,该如何实现这道题目呢?
思路:如果我们把数组中的数据放到集合里的话,那我们肯定要先设定一个反转集合元素的函数,
然后截取集合元素的一个子集合,将其放入到反转函数中,再将剩余的元素放入到其中,集合!
代码如下:
public class reverseKGroup { public static void main(String[] args){ Integer item = 0; ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList.add(1); arrayList.add(2); arrayList.add(3); arrayList.add(4); arrayList.add(5); arrayList.add(6);
System.out.println(arrayList);
//System.out.println(Reverse(arrayList));
System.out.println(fun(arrayList,2)); } public static ArrayList<Integer> fun(ArrayList<Integer> arrayList,int k){ if (k > arrayList.size()){ return null; } ArrayList<Integer> arrayList1 = new ArrayList<Integer>(); for (int i = 0;i<k;i++){ arrayList1.add(arrayList.get(i)); } Reverse(arrayList1); for (int i = k;i<arrayList.size();i++){ arrayList1.add(arrayList.get(i)); } return arrayList1; } public static ArrayList<Integer> Reverse(ArrayList<Integer> arrayList1){ Integer item = 0; for (int i = 0;i<arrayList1.size()/2;i++){ item = arrayList1.get(i); arrayList1.set(i,arrayList1.get(arrayList1.size()-1-i)); arrayList1.set(arrayList1.size()-1-i,item); } return arrayList1; } }
输出结果:
代母目前冗余性太强,以后还会继续优化,这里之暂时给出一个大体的解决方案!
标签:25,arrayList,节点,链表,add,ArrayList,集合,leetcode,刷题 From: https://www.cnblogs.com/99kol/p/16634357.html