题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
//特殊情况处理
if(head == null){
return null;
}
//找到这组要反转的最后一个节点,如果长度不够,直接返回head,表示不反转。
ListNode last = head;
for(int i = 0; i < k-1; i++){
last = last.next;
if(last == null){
return head;
}
}
//记录下一组的开始节点。
ListNode lastNext = last.next;
//断开本组和下一组。
last.next = null;
//反转本组。
reverse(head);
//本组最后一位的next指向下一组的开始节点。
head.next = reverseKGroup(lastNext, k);
//返回头节点
return last;
}
private static void reverse(ListNode head){
if(head == null){
return;
}
ListNode pre = null, cur = head;
while(cur != null){
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
}
}
#学习##刷题##每日刷题#