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