LeetCode-100题(Hot) 25. K 个一组翻转链表 [Java实现]

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

进阶:

你可以设计一个只使用常数额外空间的算法来解决此问题吗?
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]


逻辑上注意一下,因为我是直接手撕原链进行拼接,所以在交换时生成新的节点以防 head.next == head 造成死循环,而又因算法中大量使用构造函数故所占内存与时间都较大,此解仅供参考

    public ListNode reverseKGroup(ListNode head, int k) {
        if (k == 1) {
            return head;
        }
        int count = 0;
        ListNode store = new ListNode();
        ListNode result = store;
        ListNode part = null; // 每k个反转的节点子组
        ListNode remain = null; // node.size % k != 0 时剩余的子组
        while (head != null) {
            if (count == 0) {
                part = new ListNode(head.val)

你可能感兴趣的:(LeetCode,链表,leetcode,java)