25. K 个一组翻转链表

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

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

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

进阶:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {

    private void reverse(ListNode start, ListNode end) {
        ListNode cur = start, next, pre = null;
        while (cur != end) {
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
    }

    public ListNode reverseKGroup(ListNode head, int k) {
        if (head == null || head.next == null || k <= 1) {
            return head;
        }

        ListNode newHead = new ListNode(), tail = newHead;


        ListNode left = head, right = head, next;

        int count = 0;

        while (right != null) {
            count++;
            next = right.next;
            if (count == k) {
                reverse(left, next);
                tail.next = right;
                tail = left;
                tail.next = next;
                count = 0;
                left = next;
            }
            right = next;
        }


        return newHead.next;
    }
}


class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
上一篇:【2021秋冬】【剑指offer】36. 二叉搜索树与双向链表


下一篇:AttributeError: ‘Vision Transformer‘ object has no attribute “‘pre_logits‘“ -- timm中类似的问题如何解决