LC 速查

HOT 100索引 › B7 链表 Linked List

LC 25K 个一组翻转链表Reverse Nodes in k-Group 困难

把链表每 k 个节点一组翻转,不足 k 个的尾部保持原序,返回新头节点。

思路 迭代分组:先探每组第 k 个节点,翻转组内并把上一组尾接到新头,组尾接下一段。时间 O(n)。

class Solution:
    def reverseKGroup(self, head, k):
        dummy = ListNode(0, head)
        prev = dummy
        while True:
            end = prev
            for _ in range(k):
                end = end.next
                if not end:
                    return dummy.next
            nxt = end.next
            start = prev.next
            end.next = None
            prev.next = self.reverse(start)
            start.next = nxt
            prev = start

    def reverse(self, head):
        pre, cur = None, head
        while cur:
            cur.next, pre, cur = pre, cur, cur.next
        return pre
← 上一题 两两交换链表中的节点随机链表的复制 下一题 →