一、题目信息
LeetCode版本
牛客网版本
下面我以牛客网为例写代码
题目需要先输入一组数字代表链表的值,以#代表结尾。
下一行输入K代表每组个数
问题来了,怎么翻转?
假如有如下链表,且K=2.
那就从链表的一号下标开始,到2号下标,在这个区间内进行组内翻转。
如果元素不够K个时,就不进行翻转。
二、解题思路
将链表分为K组,每组组内进行翻转。每次翻转完后,更换翻转区间。其他细节放在代码注释中。
三、代码实现
class Main{
public static void reverse(String [] res,int start,int end){
while (start<end){
String tmp=res[start];
res[start]=res[end];
res[end]=tmp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String str;
str=scanner.nextLine();
//用空格分割链表每个元素
String strarr[]=str.split(" ");
int k;
k=scanner.nextInt();
//将链表分为K组,K组组内翻转,如果不够一组,就不进行翻转。
int start=0;
while (start+k-1<strarr.length-1){
reverse(strarr,start,start+k-1);
//下一组的起始位置
start=start+k;
}
/**为什么i的上限是strarr.length-2?
* 输入的要求是每个元素后面跟个 ->但是最后一个没有,
* 最后一个元素就要最后输出。
*/
for (int i = 0; i < strarr.length-2 ; i++) {
System.out.print(strarr[i]+"->");
}
/* System.out.println(strarr[ strarr.length-2]);*/
}
}
四、其他精选题目分享
怎么把i am a student逆置成student a am i?面试题逆置字符串讲解
什么?动态规划10行求出连续子数组的最大和 剑指offer-42讲解
剑指 Offer 39. 数组中出现次数超过一半的数字 简单易懂14行搞定 。人人皆可会
LeetCode 24:两两交换链表中的节点,1662. 检查两个字符串数组是否相等
剑指 Offer 58 - II. 左旋转字符串的三种解法一起看看吧!!
字符串“aabcccccaaa”压缩成“a2b1c5a3“还要返回更小的?力扣面试题 01.06. 字符串压缩讲解
找到不重复的数字进阶版 空间复杂度O(1),时间O(n)平方,不能修改数组内容。不能对数组进行排序
LeetCode_231. 判断一个数是否为2 的幂,与运算一行代码解决