zoukankan      html  css  js  c++  java
  • LeetCode 25. K 个一组翻转链表

    给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
    k 是一个正整数,它的值小于或等于链表的长度。
    如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

    示例:
    给你这个链表:1->2->3->4->5
    当 k = 2 时,应当返回: 2->1->4->3->5
    当 k = 3 时,应当返回: 3->2->1->4->5

    说明:
    你的算法只能使用常数的额外空间。
    你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

    class Solution:
        def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
            if head is None:
                return None
            cur = head
            length = 0
            while cur:
                cur = cur.next
                length += 1
            
            n,_ = divmod(length,k)
            for i in range(n):
                head = self.reverseBetween(head,i*k+1,i*k+k)
            return head 
    
        def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
            if head is None:
                return head
            pre_head = ListNode(None)
            pre_head.next = head
            pre = pre_head
            for _ in range(m-1):
                pre = pre.next
    
            cur = pre.next
            for _ in range(n-m):
                tmp = cur.next
                cur.next = tmp.next
                tmp.next = pre.next
                pre.next = tmp
            return pre_head.next
    
  • 相关阅读:
    oracle函数查询数据字典
    股票市场不是年轻人应该去的地方
    惊蟄
    大学问
    教条示龙场诸生
    生成器表达式
    三次锁定(文件加强版)
    文件的增删改查
    Python试题(1)
    Python入门(1)
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13285074.html
Copyright © 2011-2022 走看看