题目:https://leetcode.cn/problems/reverse-nodes-in-k-group/
思路:
1.参考链表反转题,将待反转链表拆成n个长度为k的链表段,for循环每次走k个节点
2.记录待反转链表的前驱和后继节点,反转完之后需要重新连接节点
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre = dummy; //待反转列表的前驱
ListNode end = dummy; //带反转列表尾部
while(end.next != null){
for(int i = 0; i < k && end != null; i++) end = end.next; //走到需要反转的位置
if(end == null) break;
ListNode start = pre.next; //链表头
ListNode next = end.next; //后继节点
end.next = null; //断开链表
pre.next = reverseList(start);
start.next = next;
pre = start;
end = pre;
}
return dummy.next;
}
public ListNode reverseList(ListNode head){
ListNode pre = null;
ListNode curr = head;
while(curr != null){
ListNode next = curr.next;
curr.next = pre;
pre = curr;
curr = next;
}
return pre;
}
}