题目描述
解题思路
第一种解法,也是我们常用的一种解题方法,首先遍历一遍列表,将列表中的val的值存放到数组中,然后按照要求对数组进行排序,排序之后,我们重新定义节点,将节点按照排完序的结果返回即可,逆序,可以直接使用切片,按个的去排序。这个后续更新
第二种解法:这种解法是博主看了一个人的题解,是真的雕!利用了栈的结构,每次将K个节点入栈和出栈,刚好是逆序的结果,在排序的过程中,直接连接一段一段的就可以。
代码实现
方法2
# 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]:resultheadpre = reversetemp = ListNode(0,head)p,templist = head,[]while True:for i in range(k):if p:templist.append(p)p = p.nextelse:return resultheadpre.nextfor i in range(k):reversetemp.next = templist.pop()reversetemp = reversetemp.nextreversetemp.next = p