25. K 个一组翻转链表给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
这题直接就放弃了,看了官方的答案,感觉也不是特别简洁,评论区的一个答案到是深得我心。这种题还得是递归。
https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/248591/k-ge-yi-zu-fan-zhuan-lian-biao-by-leetcode-solutio/?envType=study-plan-v2&envId=top-100-liked
官方解法评论区昵称为 Jack Liang 的用户 的解法
就是要把一个链表分成k个为一组的,每一组自己处理好翻转,然后把本组翻转好的新的头结点指向后续翻转的结果。
class Solution {public ListNode reverseKGroup(ListNode head, int k) {if (head == null) return head;ListNode p = head;int i = 1;// p指向本组要翻转链表的尾结点while (p != null && p.next != null && i < k) {p = p.next;i++;}if (i < k) return head;// 本组结点翻转ListNode h = head;ListNode pre = null;ListNode next = p.next;while (h != next) {ListNode t = h.next;h.next = pre;pre = h;h = t;}//本组翻转完成后的新的头结点指向后续翻转的结果head.next = reverseKGroup(next, k);return p;}
}