暴力解法;先加一个头节点
声明一个大小为k的节点数组 让第一个节点指向头节点,后面每个节点指向前一个节点的后继
用数组节点进行以下操作
完成后 让s[0]=s[1](s[1]经过以上操作后会变成交换的一段节点的最后一个节点);再重复以上操作。直到最后不足k个节点
struct ListNode* boolNodeNull(struct ListNode* head,int k){
struct ListNode* flg = head;
for(int i=0;i<k;i++){
if(flg==NULL)return NULL;
flg = flg->next;
}
return flg;
}
struct ListNode* reverseKGroup(struct ListNode* head, int k){
struct ListNode* L = (struct ListNode* )malloc(sizeof(struct ListNode));
L->next = head;
struct ListNode** s = (struct ListNode* )malloc(sizeof(struct ListNode)*(k+1));
s[0]=L;
for(int i=1;i<k+1;i++)
s[i]=s[i-1]->next;
s[0]->next = s[k];
s[1]->next = s[k]->next;
for(int i = k;i>1;i--)
s[i]->next=s[i-1];
struct ListNode* flg = head;
while(boolNodeNull(s[1],k)){
s[0]=s[1];
for(int i=1;i<k+1;i++)
s[i]=s[i-1]->next;
s[0]->next = s[k];
s[1]->next = s[k]->next;
for(int i = k;i>1;i--)
s[i]->next=s[i-1];
}
return L->next;
}