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

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, ]

  1. Pythonでリンクリストをジグザグ二分木に変換するプログラム

    単一リンクリストがあるとすると、次のルールを使用してそれをバイナリツリーパスに変換する必要があります- リンクリストの先頭はルートです。 後続の各ノードは、値が小さい場合は親の左の子になり、それ以外の場合は右の子になります。 したがって、入力が[2,1,3,4,0,5]の場合、出力はになります。 これを解決するには、次の手順に従います- 関数solve()を定義します。これはノードを取ります ノードがnullの場合、 nullを返す root:=ノードの値と同じ値のツリーノードを作成します 次のノードがnullでない場合、 ノードの次の値<ノードの値の場合、 ルートの左側

  2. 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