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