LeetCode 25. K 个一组翻转链表

题目描述

25. K 个一组翻转链表

image-20230226203302743

image-20230226203309669

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        // 统计链表长度
        int length = 0;
        ListNode cur = head;
        while (cur != null) {
            length++;
            cur = cur.next;
        }

        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode preGroupEnd = dummy;

        while (length >= k) {
            cur = preGroupEnd.next;
            // 记录本组翻转后的尾节点
            ListNode nextGroupStart = cur;

            ListNode pre = null;
            for (int i = 0; i < k; i++) {
                ListNode next = cur.next;
                cur.next = pre;
                pre = cur;
                cur = next;
            }

            // 连接:上一组末尾 -> 本组新头
            preGroupEnd.next = pre;
            // 连接:本组新尾 -> 下一组起点
            nextGroupStart.next = cur;

            preGroupEnd = nextGroupStart;
            length -= k;
        }

        return dummy.next;
    }
}
func reverseKGroup(head *ListNode, k int) *ListNode {
	// 统计链表长度
	length := 0
	cur := head
	for cur != nil {
		length++
		cur = cur.Next
	}

	dummy := &ListNode{Next: head}
	preGroupEnd := dummy

	for length >= k {
		cur = preGroupEnd.Next
		// 记录本组翻转后的尾节点
		nextGroupStart := cur

		var pre *ListNode
		for i := 0; i < k; i++ {
			next := cur.Next
			cur.Next = pre
			pre = cur
			cur = next
		}

		// 连接:上一组末尾 -> 本组新头
		preGroupEnd.Next = pre
		// 连接:本组新尾 -> 下一组起点
		nextGroupStart.Next = cur

		preGroupEnd = nextGroupStart
		length -= k
	}

	return dummy.Next
}

相似题目

题目 难度 考察点
24. 两两交换链表中的节点 中等 链表分组操作(k=2 特例)
1721. 交换链表中的节点 中等 链表双指针
2074. 反转偶数长度组的节点 中等 链表分组反转
206. 反转链表 简单 链表反转基础
92. 反转链表 II 中等 区间链表反转
143. 重排链表 中等 链表拆分+反转+合并
234. 回文链表 简单 链表反转后比较
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/67306654
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!