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

Pythonの値kに基づいてリンクリストノードを配置するプログラム


単一リンクリストと別の値kがあるとします。値がk未満のすべてのノードが最初に来て、値がkに等しいすべてのノードが次に来て、最後に他のノードが最後になるようにノードを配置する必要があります。制約は、ノードの相対的な順序を同じに保つ必要があるということです。

したがって、入力がL =[4、3、6、6、6、10、8] k =6の場合、出力は[4、3、6、6、6、10、8、]<になります。 / P>

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

  • less_head:=0と同じ値でリンクリストノードを作成します
  • less:=less_head
  • equal_head:=0と同じ値でリンクリストノードを作成します
  • equal:=equal_head
  • greater_head:=0と同じ値でリンクリストノードを作成します
  • greater:=great_head
  • cur:=node
  • curがnullでない場合は、
    • curの値が
    • next of less:=curの値と同じ値のリンクリストノードを作成します
    • 少ない:=次の少ない
  • それ以外の場合、curの値> kの場合、
    • next of great:=curの値と同じ値のリンクリストノードを作成します
    • より大きい:=次の大きい
  • それ以外の場合、
    • next of equal:=curの値と同じ値のリンクリストノードを作成します
    • 等しい:=次の等しい
  • cur:=次のcur
  • next of less:=next of equal_head
  • next of equal:=next of great_head
  • less_headの次を返す
  • 理解を深めるために、次の実装を見てみましょう-

    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):
       less_head = less = ListNode(0)
       equal_head = equal = ListNode(0)
       greater_head = greater = ListNode(0)
       cur = node
       while cur:
          if cur.val < k:
             less.next = ListNode(cur.val)
             less = less.next
          elif cur.val > k:
             greater.next = ListNode(cur.val)
             greater = greater.next
          else:
             equal.next = ListNode(cur.val)
             equal = equal.next
             cur = cur.next
             less.next = equal_head.next
             equal.next = greater_head.next
          return less_head.next
    ob = Solution()
    L = make_list([4, 3, 6, 6, 6, 10, 8])
    k = 6
    print_list(ob.solve(L, k))

    入力

    [4, 3, 6, 6, 6, 10, 8], 6

    出力

    [4, 3, 6, 6, 6, 10, 8, ]

    1. プレフィックスのリストに基づいて文字列を出力するPythonプログラム

      プレフィックス要素のリストに基づいて文字列を印刷する必要がある場合は、リスト内包表記、「any」演算子、および「startswith」メソッドが使用されます。 例 以下は同じもののデモンストレーションです my_list = ["streek", "greet", "meet", "leeks", "mean"] print("The list is : ") print(my_list) prefix_list = ["st", "ge&

    2. Pythonのリンクリストからmノードの後に​​nノードを削除するプログラム

      開始ノードが「head」で、2つの整数mとnを持つリンクリストが与えられたとします。リストをトラバースして、最初のmノードがリストに保持され、最初のmノードが削除された後の次のnノードなどのいくつかのノードを削除する必要があります。リンクリストの最後に到達するまでこれを実行します。ヘッドノードから開始し、変更されたリンクリストが返されます。 リンクリスト構造は-として与えられます Node    value : <integer>    next : <pointer to next node> したがって、入力が要素=[1、