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

Pythonのソートされた二重リンクリストで特定の製品とのペアを検索します


一意の正の数のソートされた二重リンクリストがあるとします。二重にリンクされたリストで、指定された値xと同じ積を持つペアを見つける必要があります。これは余分なスペースを消費することなく解決されることを覚えておく必要があります。

したがって、入力がL =1⇔2⇔4⇔5⇔6⇔8⇔9で、x =8の場合、出力は(1、8)、(2、4)

になります。

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

  • curr:=ヘッド、nxt:=ヘッド

  • nxt.nextはNoneではなく、ゼロ以外ですが、実行してください

    • nxt:=nxt.next

  • 見つかった:=False

  • currとnxtはnullではなく、currとnxtは異なり、nxt.nextはcurrではありませんが、実行してください

    • (curr.data * nxt.data)がxと同じ場合、

      • 見つかった:=True

      • ペアcurr.data、nxt.data

        を表示します
      • curr:=curr.next

      • nxt:=nxt.prev

    • それ以外の場合

      • if(curr.data * nxt.data)

        • curr:=curr.next

      • それ以外の場合

        • nxt:=nxt.prev

  • 見つかった場合がFalseの場合、

    • 「見つかりません」と表示します

理解を深めるために、次の実装を見てみましょう-

class ListNode:
   def __init__(self, data):
      self.data = data
      self.prev = None
      self.next = None
def insert(head, data):
   node = ListNode(0)
   node.data = data
   node.next = node.prev = None
   if (head == None):
      (head) = node
   else :
      node.next = head
      head.prev = node
      head = node
   return head
def get_pair_prod(head, x):
   curr = head
   nxt = head
   while (nxt.next != None):
      nxt = nxt.next
   found = False
   while (curr != None and nxt != None and curr != nxt and nxt.next != curr) :
      if ((curr.data * nxt.data) == x) :
         found = True
         print("(", curr.data, ", ", nxt.data, ")")
         curr = curr.next
         nxt = nxt.prev
      else :
         if ((curr.data * nxt.data) < x):
            curr = curr.next
         else:
            nxt = nxt.prev
   if (found == False):
      print( "Not found")
head = None
head = insert(head, 9)
head = insert(head, 8)
head = insert(head, 6)
head = insert(head, 5)
head = insert(head, 4)
head = insert(head, 2)
head = insert(head, 1)
x = 8
get_pair_prod(head, x)

入力

head = None
head = insert(head, 9)
head = insert(head, 8)
head = insert(head, 6)
head = insert(head, 5)
head = insert(head, 4)
head = insert(head, 2)
head = insert(head, 1)
x = 8

出力

( 1 , 8 )
( 2 , 4 )

  1. ソートされた二重リンクリスト内のトリプレットをカウントします。このリストの積は、C++で指定された値xに等しくなります。

    整数値を含むソートされた二重リンクリストが与えられます。目標は、積が与えられた値xに等しいトリプレットを見つけることです。入力リンクリストが3−4−1−2で、xが6の場合、カウントは1になります(トリプレット(3,1,2)) 例 入力 linked list: [ 200−4−16−5−10−10−2 ] x=200 出力 Count of triplets in a sorted doubly linked list whose product is equal to a given value x are:

  2. リンクリストがPythonの特定のバイナリツリーに存在するかどうかを確認するプログラム

    ルートノード「root」を持つバイナリツリーと、ヘッドノード「head」を持つリンクリストが与えられたとします。そのリンクリストがその二分木に存在するかどうかを調べる必要があります。ツリー内のノードのセットがリンクリストとして順番に相互にリンクしている場合、およびその順序が提供されたリンクリストの順序と類似している場合は、「True」を返します。それ以外の場合は、「False」を返します。 したがって、入力が次のような場合 ツリー リンクリスト その場合、出力はTrueになります。 これを解決するには、次の手順に従います- arr:=新しいリスト size:=arrのサ