单链表每k个一组反转(python)

题目:

将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。

具体做法:k = 3

  • step 1:每次从进入函数的头节点优先遍历链表k次,分出一组,若是后续不足k个节点,不用反转直接返回头。
  • step 2:从进入函数的头节点开始,依次反转接下来的一组链表
  • step 3:这一组经过反转后,原来的头变成了尾,后面接下一组的反转结果,下一组采用上述递归继续。

 

 

 

 

 

 

 

 

 

 

 

 

def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
        # write code here
        #找到每次翻转的尾部
        tail = head
        #遍历k次到尾部
        for i in range(0,k):
            #如果不足k到了链表尾,直接返回,不翻转
            if tail == None:
                return head
            tail = tail.next
        #翻转时需要的前序和当前节点
        pre = None
        cur = head
        #在到达当前段尾节点前
        while cur != tail:
            #翻转
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        #当前尾指向下一段要翻转的链表
        head.next = self.reverseKGroup(tail, k)
        return pre

 

posted @   小仙女、  阅读(380)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示