Pythonで特定のリンクリストを昇順で並べ替えるプログラム
リンクリストがあるとします。リストを昇順で並べ替える必要があります。
したがって、入力が[5、8、4、1、5、6、3]の場合、出力は[1、3、4、5、5、6、8、]
になります。これを解決するには、次の手順に従います。
- 値:=新しいリスト
- ヘッド:=ノード
- ノードがnullでない場合は、
- 値の最後にノードの値を挿入
- node:=ノードの次
- リスト値を並べ替える
- values:=値の要素を取得して両端キューを作成します
- ノード:=ヘッド
- ノードがnullでない場合は、
- ノードの値:=キューの左側の要素とキューの左側から要素を削除
- node:=ノードの次
- リターンヘッド
理解を深めるために、次の実装を見てみましょう。
例
import collections 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): values = [] head = node while node: values.append(node.val) node = node.next values.sort() values = collections.deque(values) node = head while node: node.val = values.popleft() node = node.next return head ob = Solution() head = make_list([5, 8, 4, 1, 5, 6, 3]) print_list(ob.solve(head))
入力
[5, 8, 4, 1, 5, 6, 3]
出力
[1, 3, 4, 5, 5, 6, 8, ]
-
Pythonでリンクリストをジグザグ二分木に変換するプログラム
単一リンクリストがあるとすると、次のルールを使用してそれをバイナリツリーパスに変換する必要があります- リンクリストの先頭はルートです。 後続の各ノードは、値が小さい場合は親の左の子になり、それ以外の場合は右の子になります。 したがって、入力が[2,1,3,4,0,5]の場合、出力はになります。 これを解決するには、次の手順に従います- 関数solve()を定義します。これはノードを取ります ノードがnullの場合、 nullを返す root:=ノードの値と同じ値のツリーノードを作成します 次のノードがnullでない場合、 ノードの次の値<ノードの値の場合、 ルートの左側
-
Pythonでリンクリストのノードを削除する
いくつかの要素を持つリンクリストがあるとします。私たちのタスクは、リストから特定のノードを削除する関数を作成することです。したがって、リストが1→3→5→7→9のようで、3を削除すると、1→5→7→9になります。 削除するノードを指すポインタ「ノード」があるとすると、ノードを削除するにはこれらの操作を実行する必要があります- node.val =node.next.val node.next =node.next.next 例(Python) 理解を深めるために、次の実装を見てみましょう- class ListNode: def __init__(se