当前位置: 首页 > article >正文

萱仔求职复习系列——力扣

25. K 个一组翻转链表

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

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

我认为其实还是某一种反转链表,只不过变成一部分反转了,可以用递归来解决这个问题:

递归结束条件:当剩下的节点少于 k 个时,保持原有顺序,不再翻转。

递归处理:每次递归处理 k 个节点,翻转它们,然后将翻转后的部分与递归处理的剩余部分连接起来。

翻转部分链表:我们需要在每次递归时翻转 k 个节点,翻转完成后将新的头节点返回,并递归连接。

class Solution:
    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
        # 检查链表是否有足够的节点进行翻转
        count = 0
        ptr = head
        while count < k and ptr:
            ptr = ptr.next
            count += 1
        
        # 如果节点数大于等于k,则进行翻转
        if count == k:
            # 翻转前k个节点
            prev = None
            curr = head
            for _ in range(k):
                next_node = curr.next
                curr.next = prev
                prev = curr
                curr = next_node
            
            # 递归处理剩余的部分,并连接回翻转后的部分
            head.next = self.reverseKGroup(ptr, k)
            
            # 返回新的头节点
            return prev
        
        # 如果节点数不足k,保持原样
        return head


http://www.kler.cn/news/354658.html

相关文章:

  • KafKa 集群【docker compose】
  • 刚刚,ChatGPT推出Windows客户端!
  • 111 - Lecture4
  • 如何保证接口幂等性?
  • C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别
  • 华为OD题库刷题记录1(掌握的单词个数+手机APP防沉迷+找朋友+流浪地球)
  • 小马识途海外媒体推广有何优势?
  • 关于核心技术工程化、产业化的思考
  • Django操作数据库
  • 几种HTTP请求参数的简单介绍
  • JavaSE之抽象类和接口
  • C++ OpenCV实现简单的自瞄脚本(OpenCV实战)
  • 永恒之蓝漏洞
  • 毕业设计之—基于ManTra-Net的图像篡改检测方法研究与应用实现
  • uni-app关闭底部系统导航栏的控制按钮BUG
  • SSTI模板注入+CTF实例
  • TS学习——type与interface的异同点
  • c++基础知识复习(1)
  • pdf删除几个页面怎么操作?PDF页面删除的快捷方法
  • Unity UGUI SuperScrollView介绍