【LeetCode】25.K 个一组翻转链表

25.K 个一组翻转链表

知识点:链表

题目描述

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

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例
示例 1 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 示例 2: 输入:head = [1,2,3,4,5], k = 3 输出:[3,2,1,4,5] 示例 3 输入:head = [1,2,3,4,5], k = 1 输出:[1,2,3,4,5]

解法一:迭代

这道题目其实是206.反转链表的进阶,我们需要以k个节点的数量为一组,然后进行反转
所以自然的思路就是将整个链表分组,每组都是k个节点,然后将这组的链表进行反转
在这之后,我们需要将这个翻转后的链表和之前一组的尾部节点连接在一起,然后将当前这组的尾部节点和下一组的头部节点连接在一起,所以需要记录上一个组的尾部节点。
写翻转链表的函数,传进去头结点和尾节点,然后返回新的头结点和尾节点,

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]: dummyhead = ListNode(0) dummyhead.next = head # head为当前要反转链表的头 pre = dummyhead # pre为前一个链表的末尾 while head: tail = pre for i in range(k): tail = tail.next if not tail: return dummyhead.next nex = tail.next #先记录下来 head, tail = self.reverselist(head, tail) #反转链表 pre.next = head tail.next = nex pre = tail head = tail.next return dummyhead.next def reverselist(self, head, tail): dummyhead = head pre = head cur = head.next if not pre or not cur: return pre, pre while pre != tail: nex = cur.next cur.next = pre pre, cur = cur, nex return pre, dummyhead #返回新的头尾节点

__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/16139458.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】25.K 个一组翻转链表』
点击右上角即可分享
微信分享提示