思路非常简单,就是在反转部分链表的基础上,套一层循环即可,注意p2为null时要进行判断,否则会出现空指针异常;
核心思想就是链表的原地逆置
public ListNode reverseKGroup(ListNode head, int k) {
int len = 0;
ListNode query = head;
while(query != null){
len++;
query = query.next;
}
if(len == 1)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode p1 = dummy;
while(len/k > 0){
for (int i = 0; i < k - 1; i++) {
ListNode p2 = head.next;
if(p2 == null)
break;
head.next = p2.next;
p2.next = p1.next;
p1.next = p2;
}
p1 = head;
head = head.next;
len = len - k;
}
return dummy.next;
}