# class ListNode: # def __init__(self, x): # self.val = x # self.next = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param head ListNode类 # @param k int整型 # @return ListNode类 # class Solution: def reverseKGroup(self , head: ListNode, k: int) -> ListNode: # write code here result_list_head_flag = ListNode(-1) result_list_head_flag.next = head # 第一个节点没有上一个节点,所以初始化为空。 previous = None current = head # 现在还没有上一个子列表,用结果列表头的标记指针来占用这个位置,可以让这个头标记可以在处理过程中连接上结果列表的头节点。 previous_sublist_tail = result_list_head_flag # 当前子列表的尾巴就是当前访问到的节点。 current_sublist_tail = current count = 0 while current: print(current.val) count += 1 if count == 1: # 如果是新开子列表的第一个节点,复制当前节点。 copy_current = ListNode(current.val) # 把这个节点标记为当前子列表的尾巴。 current_sublist_tail = copy_current # 把这个复制节点标记为上一个节点,并进行下一步访问。 previous = copy_current current = current.next elif count == k: # 复制当前节点,并与上一个复制节点逆序。 copy_current = ListNode(current.val) copy_current.next = previous # 把当前子列表和上一个子列表的尾巴相连。 previous_sublist_tail.next = copy_current # 把当前子列表的尾巴指向原列表中的下一个节点,保证凑不足k个元素的剩余部分能与逆序列表相连。 current_sublist_tail.next = current.next # 当前子列表的为节点将作为下个子列表的前一个子列表的尾节点。 previous_sublist_tail = current_sublist_tail current = current.next count = 0 else: # 复制当前节点,并与上一个复制节点逆序。 copy_current = ListNode(current.val) copy_current.next = previous # 把这个复制节点标记为上一个节点,并进行下一步访问。 previous = copy_current current = current.next return result_list_head_flag.next