• 力扣——Reverse Nodes in k-Group(K 个一组翻转链表) python实现


    题目描述:

    中文:

    给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

    k 是一个正整数,它的值小于或等于链表的长度。

    如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

    示例 :

    给定这个链表:1->2->3->4->5

    当 k = 2 时,应当返回: 2->1->4->3->5

    当 k = 3 时,应当返回: 3->2->1->4->5

    说明 :

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

    英文:

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

    k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

    Example:

    Given this linked list: 1->2->3->4->5

    For k = 2, you should return: 2->1->4->3->5

    For k = 3, you should return: 3->2->1->4->5

    Note:

    Only constant extra memory is allowed.
    You may not alter the values in the list's nodes, only nodes itself may be changed.

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def reverseKGroup(self, head, k):
            """
            :type head: ListNode
            :type k: int
            :rtype: ListNode
            """
            pre = ListNode(-1)
            tail = pre
            
            q = head
            while q is not None:
                #向后查找k个节点
                n = k
                p = q
                while p is not None and n > 0:
                    p = p.next
                    n -= 1
                    
                #如果在查找k个节点的过程中遇到None,则说明
                #后面的节点不够k个节点则直接跳出即可
                if n > 0:
                    tail.next = q
                    break
                
                #将这K个节点以头插法插入
                end = q
                while q != p:
                    t = q.next
                    q.next = tail.next
                    tail.next = q
                    q = t
                tail = end
            return pre.next

    题目来源:力扣

  • 相关阅读:
    解决SVN创建补丁乱码问题
    一款监控网络状态的好工具 Smokeping
    微软“2052”文件夹什么意思
    SVN目录大小写漏洞
    探索Emberjs——了解Emberjs
    第一次尝试三层架构<实现简单的增、删、查、改>
    站内搜索1之开篇介绍
    原生的几个javascript常用特效
    如果你喜欢上了一个程序员小伙>献给所有的程序员女友
    站内搜索3之Lucene.Net使用
  • 原文地址:https://www.cnblogs.com/spp666/p/11656434.html
Copyright © 2020-2023  润新知