*【python/Hard/25】Reverse Nodes in k-Group

题目

*【python/Hard/25】Reverse Nodes in k-Group

基本思路

先依次向后确定每个分组,对确定的分组用尾插法进行逆置,然后设置新的起点,重复上述过程即可

实现代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseKGroup(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        pre = ListNode(-1)
        tail = pre
        
        q = head
        while q is not None:
            #向后查找k个节点
            n = k
            p = q
            while p is not None and n > 0:
                p = p.next
                n -= 1
                
            #如果在查找k个节点的过程中遇到None,则说明
            #后面的节点不够k个节点则直接跳出即可
            if n > 0:
                tail.next = q
                break
            
            #将这K个节点以头插法插入
            end = q
            while q != p:
                t = q.next
                q.next = tail.next
                tail.next = q
                q = t
            tail = end
        return pre.next