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讲解