题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
这个题的前置条件是要熟练掌握链表反转
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
//使用递归的设计思想每次只翻转一部分剩下的部分交给下次递归
// 初始判断如果k=1直接返回
if(k==1||head==null||head.next==null){
return head;
}
ListNode node=head;
//判断是否满足翻转需求如果不能就直接返回头部
for(int i=0;i<k;i++){
if(head==null){
return node;
}
head=head.next;
}
head=node;
// 初始化节点
ListNode pre=new ListNode(-1),cur,res,temp;
pre.next=head;
cur=head.next;
res=head;
//对需要的部分进行翻转第一个不用动需要翻转剩下的k-1
for(int i=0;i<k-1;i++){
temp=cur.next;
cur.next=pre.next;
pre.next=cur;
cur=temp;
}
//将翻转后的部分与后续部分进行拼接
res.next=reverseKGroup(cur,k);
return pre.next;
}
}
360集团公司氛围 352人发布