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

Pythonで特定のリンクリストから折りたたまれたリストを見つけるプログラム


リンクリストがあるとします。リンクリストの前半を取得し、後半を折りたたんでから、交差するノードの合計を取得してマージする必要があります。最後に、リンクリストの結果の先頭を返す必要があります。

したがって、入力が[5,8,1,2,4,7,5]の場合、出力は[2、5、15、10、]

になります。

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

  • temp:=0
  • ptr:=ノード
  • ptrがnullでない場合は、
    • temp:=temp + 1
    • ptr:=ptrの次
  • t:=温度の商/ 2
  • m:=ノード
  • stk:=新しいスタック
  • tがゼロ以外の場合は、
    • mの値をstkにプッシュ
    • tmp:=mの次
    • mの次:=null
    • m:=tmp
    • t:=t-1
  • node:=m
  • 温度が偶数の場合、
    • m:=mの次
  • mがnullでない場合は、
    • mの値:=mの値+スタックトップ要素。
    • stkからポップ
    • m:=mの次
  • リターンノード

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

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):
      temp = 0
      ptr = node
      while ptr:
         temp += 1
         ptr = ptr.next
      t = temp // 2
      m = node
      stk = []
      while t:
         stk.append(m.val)
         tmp = m.next
         m.next = None
         m = tmp
         t -= 1
      node = m
      if temp % 2 != 0:
         m = m.next
      while m:
         m.val += stk.pop()
         m = m.next
      return node
ob = Solution()
head = make_list([5,8,1,2,4,7,5])
print_list(ob.solve(head))

入力

[5,8,1,2,4,7,5]

出力

[2, 5, 15, 10, ]

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

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

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

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