/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* reverseKGroup(struct ListNode* head, int k ){//函数命名相似程度很高的话,不利于后续集体修改
struct ListNode* sample;
//计算string的长度
sample=head;
int count=0;
while(sample){
sample=sample->next;
count++;
}
//算出重复次数
count=count/k;
sample=(struct ListNode*)malloc(sizeof(struct ListNode));//这里要申请单位才可以给他的next赋值,重新定义sample的位置,是头节点前面的头节点,因为这个题目中的链表不带头节点
sample->next=head;
struct ListNode* sample1;//移动到i次要交换的最后一格位置,同时将sample1后面切断
struct ListNode* sample2;//移动到i次交换位置第一格,方便后续头插法
struct ListNode* sample2n;//头插法,方便sample2后续移动
struct ListNode* sample3;//sample2前面一格的位置,代替头节点
for(int i=1;i<=count;i++)
{
sample1=sample;
sample2=sample;
sample3=sample;
for(int j=0;j<k*i;j++)
{
sample1=sample1->next;
}
for(int q=0;q<k*(i-1)+1;q++){
sample2=sample2->next;
}
for(int p=0;p<k*(i-1);p++){
sample3=sample3->next;
}
//头插法
sample3->next=sample1->next;
sample1->next=NULL;
while(sample2)
{
sample2n=sample2->next;
sample2->next=sample3->next;
sample3->next=sample2;
sample2=sample2n;
}
}
return sample->next;//这里return head和return sample->next的效果一样
}
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* reverseKGroup(struct ListNode* head, int k ){//函数命名相似程度很高的话,不利于后续集体修改
struct ListNode* sample;
//计算string的长度
sample=head;
int count=0;
while(sample){
sample=sample->next;
count++;
}
//算出重复次数
count=count/k;
sample=(struct ListNode*)malloc(sizeof(struct ListNode));//这里要申请单位才可以给他的next赋值,重新定义sample的位置,是头节点前面的头节点,因为这个题目中的链表不带头节点
sample->next=head;
struct ListNode* sample1;//移动到i次要交换的最后一格位置,同时将sample1后面切断
struct ListNode* sample2;//移动到i次交换位置第一格,方便后续头插法
struct ListNode* sample2n;//头插法,方便sample2后续移动
struct ListNode* sample3;//sample2前面一格的位置,代替头节点
for(int i=1;i<=count;i++)
{
sample1=sample;
sample2=sample;
sample3=sample;
for(int j=0;j<k*i;j++)
{
sample1=sample1->next;
}
for(int q=0;q<k*(i-1)+1;q++){
sample2=sample2->next;
}
for(int p=0;p<k*(i-1);p++){
sample3=sample3->next;
}
//头插法
sample3->next=sample1->next;
sample1->next=NULL;
while(sample2)
{
sample2n=sample2->next;
sample2->next=sample3->next;
sample3->next=sample2;
sample2=sample2n;
}
}
return sample->next;//这里return head和return sample->next的效果一样
}