Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでサイズkのグループによってリンクリストを逆にするプログラム


単一リンクリストがあり、別の値kがあるとすると、ノードのk個の連続するグループごとに逆にする必要があります。

したがって、入力がList =[1,2,3,4,5,6,7,8,9,10]、k =3の場合、出力は[3、2、1、6、5 、4、9、8、7、10、]

これを解決するには、次の手順に従います-

  • tmp:=値が0の新しいノード
  • tmpの次:=ノード
  • prev:=null、curr:=null
  • lp:=temp、lc:=curr
  • cnt:=k
  • currがnullでない場合は、
    • prev:=null
    • cnt> 0でcurrがnullでない場合は、
      • 次の:=次のcurr
      • 次のcurr:=prev
      • prev:=curr、curr:=follow
      • cnt:=cnt-1
    • lpの次:=prev、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, ]

  1. 文中の各単語を逆にするPythonプログラム?

    ここでは、Python組み込み関数を使用します。まず、文を単語のリストに分割します。次に、各単語を逆にして新しいリストを作成します。ここでは、Pythonリスト内包法を使用し、最後に新しい単語リストを結合して、新しい文を作成します。 例 Input :: PYTHON PROGRAM Output :: NOHTYP MARGORP アルゴリズム Step 1 : input a sentence. And store this in a variable s. Step 2 : Then splitting the sentence into a list of words. w

  2. 与えられたサイズのグループで配列を逆にするPythonプログラム?

    =1の場合、配列内のすべての要素を逆にします。 アルゴリズム Revarray(A,n,p) /* A is an integer Array, n is the size of an array and every sub-array of size p starting from the beginning of the array and reverse it.*/ Step 1: i is the loop control variable which is initialized by 0. Step 2: using while loop check i is less than