程序在Python中按大小为k的组反向链接列表

假设我们有一个单链表,还有另一个值k,我们必须反转每k个连续的节点组。

因此,如果输入类似于List = [1,2,3,4,5,6,7,8,9,10],k = 3,则输出将为[3,2,1,1,6,5 ,4,9,8,7,10,]

为了解决这个问题,我们将遵循以下步骤-

  • tmp:=一个值为0的新节点

  • tmp的下一个:=节点

  • 上一页:= null,curr:= null

  • lp:= temp,lc:= curr

  • cnt:= k

  • 虽然curr不为空,但是

    • 以下:=下一个

    • 下一个curr:=上一页

    • 上一页:= curr,curr:=以下

    • cnt:= cnt-1

    • 上一页:=空

    • 当cnt> 0并且curr不为null时,执行

    • 下一个lp:=上一个,下一个lc:= curr

    • lp:= lc,lc:= curr

    • cnt:= k

    • 返回tmp的下一个

    让我们看下面的实现以更好地理解-

    示例

    class ListNode:

       def __init__(self, data, next = None):

          self.val = data

          self.next = next

    def make_list(elements):

       head = ListNode(elements[0])

       for element in elements[1:]:

          ptr = head

          while ptr.next:

             ptr = ptr.next

          ptr.next = ListNode(element)

       return head

    def print_list(head):

       ptr = head print('[', end = "")

       while ptr:

          print(ptr.val, end = ", ")

          ptr = ptr.next

          print(']')

    class Solution:

       def solve(self, node, k):

          tmp = ListNode(0)

          tmp.next = node

          prev, curr = None, node

          lp, lc = tmp, curr

          cnt = k

          while curr:

             prev = None

             while cnt > 0 and curr:

                following = curr.next

                curr.next = prev

                prev, curr = curr, following

                cnt -= 1

             lp.next, lc.next = prev, curr

             lp, lc = lc, curr

             cnt = k

          return tmp.next

    ob = Solution()head = make_list([1,2,3,4,5,6,7,8,9,10])

    print_list(ob.solve(head, 3))

    输入值

    [1,2,3,4,5,6,7,8,9,10], 3

    输出结果

    [3, 2, 1, 6, 5, 4, 9, 8, 7, 10, ]

    以上是 程序在Python中按大小为k的组反向链接列表 的全部内容, 来源链接: utcz.com/z/345459.html

    回到顶部