• 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
    
  • 相关阅读:
    Homework
    自我介绍,恩。。算是吧
    What ASP.NET Developers Should Know About JavaScript
    短信猫软件的C#实现系列文章
    装箱与拆箱
    HTML的基本标签
    CSS基础用法
    ajaxToolkit:AutoCompleteExtender 用法详解
    比较强大的分页存储过程
    不知道写点什么
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13285074.html
Copyright © 2020-2023  润新知