【题目】
将链表以k个为一组进行翻转,要求与24相同
【思路】
定义r_curr指向即将进行翻转的k个元素的紧邻的前一个元素;
定义r依次遍历将要进行翻转的k个元素,并最终执行其紧邻的后一个元素;
将遍历到的k个listnode放入数组中,进行翻转操作,最后将r_curr的next指向翻转后的列表,重复该过程直至完成
【Java代码】
public ListNode reverseKGroup(ListNode head, int k){
boolean flag_head = true;
ListNode[] candidate = new ListNode[k];
ListNode r = head;
ListNode r_curr = null;
boolean flag = false;
while(r != null){
for(int i = 0 ; i < k ; i++){
if(r == null){
flag = true;
break;
}
candidate[i] = r;
r = r.next;
}
if(flag)
break;
candidate[0].next = r;
for(int i = 1 ; i < k ; i++){
candidate[i].next = candidate[i-1];
}
if(flag_head){
head = candidate[k-1];
flag_head = false;
r_curr = head;
for(int i = 0 ; i < k-1 ; i++){
r_curr = r_curr.next;
}
}else{
r_curr.next = candidate[k-1];
for(int i = 0 ; i < k ; i++)
r_curr = r_curr.next;
}
}
return head;
}
【递归】
该题目也可以由递归实现,只对前k个元素进行详细翻转说明,后面部分的翻转结果直接由递归函数得到