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

リンクリストがPythonでソート(反復および再帰)されているかどうかを確認します


リンクリストがあるとすると、リンクリストが昇順ではない順序で並べ替えられているかどうかを確認するために2つの関数を定義する必要があります。 1つの方法は反復的に機能し、もう1つは再帰的に機能します。

したがって、入力がL =[15、13、8、6、4、2]の場合、出力はTrueになります。

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

  • 関数solve_iter()を定義します。これは頭​​を悩ます
  • ヘッドがnullの場合、
    • Trueを返す
  • 次の頭がnullでない場合は、
    • 現在:=頭
    • 現在の値<=(現在の次の)の値の場合、
      • Falseを返す
    • 頭:=頭の次
  • Trueを返す
  • 関数solve_rec()を定義します。これは頭​​を悩ます
  • ヘッドがヌルまたはヘッドの次がヌルの場合、
    • Trueを返す
  • (頭の値>(頭の次)の値が0でなく、solve_rec(頭の次)が真の場合はtrueを返します)それ以外の場合はfalseを返します

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

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 solve_iter(head):
   if head == None:
      return True
   while head.next != None:
      current = head
      if current.val <= current.next.val:
         return False
      head = head.next
   return True
def solve_rec(head):
   if head == None or head.next == None:
      return True
   return head.val > head.next.val and solve_rec(head.next)
L = make_list([15, 13, 8, 6, 4, 2])
print(solve_iter(L))
print(solve_rec(L))

入力

[15, 13, 8, 6, 4, 2]

出力

True
True

  1. C++での再帰的な挿入とトラバーサルのリンクリスト

    リンクリストを形成するために使用される整数値が与えられます。タスクは、最初に挿入し、次に再帰的アプローチを使用して単一リンクリストをトラバースすることです。 最後にノードを再帰的に追加 ヘッドがNULLの場合→ヘッドにノードを追加 それ以外の場合は、headに追加します(head→next) ノードの再帰的走査 ヘッドがNULLの場合→終了 それ以外の場合はprint(head→next) 例 入力 − 1 --2 -7 -9 -10 出力 −リンクリスト:1→2→7→9→10→NULL 入力 − 12-21-17-94-18 出力 −リンクリスト

  2. C++でソートおよびローテーションされたリンクリストのローテーションをカウントします

    リンクリストが表示されます。リストは最初にソートされ、次にK個のノードでローテーションされます。目標は、Kの値を見つけることです。K個のノードだけ回転する入力としてリンクリストを以下に示す場合- それならオリジナルは-だったに違いない ここでKは2であることがわかります。入力リンクリストは、元のソートされたリンクリストの2ノードのローテーションです。 例を挙げて理解しましょう。 入力 −リスト:5→7→9→1→3 出力 リンクリストの要素は次のとおりです。5791 3 ソートおよびローテーションされたリンクリストのローテーション数は-3 説明 −元のソート済み