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

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

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

#coding:utf-8
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    def reverse_list(self, head):
        prev = None
        cur = head
        while cur != None:
            next = cur.next
            cur.next = prev
            prev = cur
            cur = next
        return prev
    def reverseKGroup(self , head , k ):
        # write code here
        cur = head
        nums = 0
        # 计算链表的个数
        while cur != None:
            cur = cur.next
            nums += 1
        # 如果链表的个数小于k,则无需反转
        if nums < k:
            return head
        # 如果链表的个数等于k,则全部反转
        elif nums == k:
            return self.reverse_list(head)
        # 链表个数大于k,找到前k个的临界点,cur和next,前k个反转,后面的交给递归的reverseKGroup方法
        else:
            cur = head
            for i in range(k - 1):
                cur = cur.next
            next = cur.next
            cur.next = None
            start = self.reverse_list(head)
            head.next = self.reverseKGroup(next, k)
            return start

#数据结构和算法#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务