解法一:先计算链表的总个数。根据节点总数和当前处理的节点个数进行判断。
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode reverse = new ListNode();
reverse.next = null;
ListNode curr_reverse=reverse;
int num = 0;
ListNode curr_head = head
while(curr_head!=null){
num++;
curr_head=curr_head.next;
}
int round = num/k;
int n=0;
while(n<round*k){
ListNode temp = head.next;
head.next = null;
curr_reverse.next = head;
head = temp;
n++;
while(n%k!=0){
temp = head.next;
head.next = curr_reverse.next;
curr_reverse.next = head;
head = temp;
n++;
}
while(curr_reverse.next != null){
curr_reverse = curr_reverse.next;
}
}
curr_reverse.next = head;
reverse=reverse.next;
return reverse;
}
}
注意:
- 当新链表个数n<round(轮数)*k时,表示继续置换;否则表示后续节点不需要置换。
- n%k!=0表示本轮置换还未结束
- 记得加入后续不需要reverse的节点
- 设置没有数据的头节点,后续结果要去掉头节点