赞
踩
题目:
给你链表的头节点
head
,每k
个节点一组进行翻转,请你返回修改后的链表。
k
是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k
的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
示例:
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]
示例 2:
输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]
解法:
先把链表转成列表,然后根据k把列表分成多份,每份逆置,最后合并起来。
代码:
# 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]: list1 = [] while head: list1.append(head.val) head = head.next index = 0 list2 = [] while 1: if index + k > len(list1): list2.extend(list1[index:]) break else: list2.extend(list1[index:index + k][::-1]) index += k head = point = ListNode(-1) for value in list2: node = ListNode(value) point.next = node point = point.next return head.next
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。