Leetcode. Reverse Nodes in k-Group

本文介绍了一种链表操作的高效方法:K组翻转。通过两种不同的实现方案,详细解析了如何在O(n)的时间复杂度和O(1)的空间复杂度下完成这一任务。方法一使用额外空间进行节点值的存储与翻转;方法二采用原地翻转技巧,直接调整链表指针指向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题有两种解法,

1:对于任意的k-group,利用O(k)的额外空间存储val,然后从两头开始遍历交换元素->逆转,最后返回一个结点。

2因为节点对插入操作的复杂度是O(1),我们每遇到一个节点,就将它插入到当前的首节点之后,这样时间复杂度都是O(n),空间复杂度是O(1)。

class Solution(object):
    def reverseKGroup(self, head, k):
        def count(h):
            cnt = 0
            while h:h=h.next;cnt+=1
            return cnt
        # def reverse(pre,k):
            # s = []
            # h=pre
            # pre=pre.next
            # j = 0
            # for i in range(k):
                # j+=1
                # s.append(pre.val)
                # pre=pre.next
            # pre = h.next
            # last = None
            # for i in range(j-1,-1,-1):
                # pre.val = s[i]
                # last = pre
                # pre = pre.next
            # return last
        def reverse(pre,k):
            head = pre.next
            cur = head.next
            for i in range(k-1):
                head.next = cur.next
                cur.next = pre.next
                pre.next = cur
                cur = head.next
            return head
        pre = ListNode(0)
        Head = pre
        start,n = 0,count(head)
        pre.next = head
        while start+k<=n:
            pre = reverse(pre,k)
            start+=k
        return Head.next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值