[leetcode] 25. K 个一组翻转链表 Reverse Nodes in k-Group
给你链表的头节点 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]提示链表中的节点数目为 n1 k n 50000 Node.val 1000进阶你可以设计一个只用 O(1) 额外内存空间的算法解决此问题吗Python实现思路很直接就是遍历K个值然后进行翻转操作但这个链表容易出错要多加练习才行。# Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution: def reverse(self, head, tail): pre tail.next p head while pre!tail: next_p p.next p.next pre pre p p next_p return tail, head def reverseKGroup(self, head: Optional[ListNode], k: int) - Optional[ListNode]: dummy ListNode(-1) dummy.next head pre dummy slow head while slow: fast pre for i in range(k): fast fast.next if not fast: return dummy.next t fast.next slow , fast self.reverse(slow,fast) pre.next slow fast.next t pre fast slow fast.next return dummy.next另一个带注释的递归思路实现如下classSolution:defreverseKGroup(self,head:Optional[ListNode],k:int)-Optional[ListNode]:# 1. Check if there are at least k nodes leftcurheadfor_inrange(k):ifcurisNone:returnhead curcur.next# 2. Reverse the k nodespreNonecurheadfor_inrange(k):nxtcur.nextcur.nextpre precur curnxt# 3. After reversal, head is now the tail of this group.head.nextself.reverseKGroup(cur,k)returnpre
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2603573.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!