单链表每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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!