题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

这里讲一下递归的解法,因为我们不能确定链表长度,所以我们可以先正向迭代直到尾部,然后再反向递归地进行链表的翻转。
每次转入的都是K个节点中开始的那个节点,然后我们判断这组是不是最后一组,
如果这组是最后一组并且不够K个,那么我们就将这个开始的节点返回并且用来翻转;
如果这组是最后一组并且正好够K个,那么我们就直接将这组节点进行翻转并且返回翻转之后那个开始的节点;
递归过程就是每次拿这K个的头部到上一次返回的节点(下一组开始的节点),在这之间做翻转。

class Solution:
    def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
        # write code here
        if head == None&nbs***bsp;head.next == None&nbs***bsp;k==1:
            return head
        count = 0
        next_start = head
        while count != k:
            next_start = next_start.next
            count += 1
            if next_start == None:
                if count == k:
                    while k != 0:
                        tmp = head.next
                        head.next = next_start
                        next_start = head
                        head = tmp
                        k-=1
                    return next_start
                else:
                    return head
            
        next_start = self.reverseKGroup(next_start, k)
        
        while k!=0:
            tmp = head.next
            head.next = next_start
            next_start = head
            head = tmp
            k-=1
        return next_start


全部评论

相关推荐

不愿透露姓名的神秘牛友
06-25 20:45
点赞 评论 收藏
分享
ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务