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

Pythonのリンクリストからmノードの後に​​nノードを削除するプログラム


開始ノードが「head」で、2つの整数mとnを持つリンクリストが与えられたとします。リストをトラバースして、最初のmノードがリストに保持され、最初のmノードが削除された後の次のnノードなどのいくつかのノードを削除する必要があります。リンクリストの最後に到達するまでこれを実行します。ヘッドノードから開始し、変更されたリンクリストが返されます。

リンクリスト構造は-

として与えられます
Node
   value : <integer>
   next : <pointer to next node>

したがって、入力が要素=[1、2、3、4、5、6、7、8]、m =3、n =1のような場合、出力は[1、2、3、5、6 、7、]

Pythonのリンクリストからmノードの後に​​nノードを削除するプログラム

このプロセスでは3ノード以降のすべてのノードが削除されるため、最終的にリンクリストは次のようになります-

Pythonのリンクリストからmノードの後に​​nノードを削除するプログラム

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

  • 前:=頭

  • curr:=ヘッド

  • q:=0

  • p:=0

  • currがnullでない場合は、実行してください

    • q:=q + 1

    • qがmと同じ場合、

      • 0からnの範囲のiの場合、実行

        • curr.nextがnullでない場合、

          • curr:=currの次

      • next of prev:=next of curr

      • q:=0

    • prev:=次のprev

    • curr:=currの次

  • リターンヘッド

例(Python)

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

class ListNode:
   def __init__(self, val=0, next=None):
      self.val = val
      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(']')

def solve(head, m, n):
   prev = curr = head
   q = 0
   p = 0

   while curr:
      q += 1
      if q == m:
         for i in range(n):
            if curr.next is not None:
               curr = curr.next
         prev.next = curr.next
         q = 0

      prev = prev.next
      curr = curr.next

   return head

head = ListNode()
elements = [1, 2, 3, 4, 5, 6, 7, 8]
head = make_list(elements)
res = solve(head, 3, 1)
print_list(res)

入力

[1, 2, 3, 4, 5, 6, 7, 8], 3, 1

出力

[1, 2, 3, 5, 6, 7,]

  1. Pythonの回文リンクリスト

    リンクリストがあるとします。リスト要素がアパリンドロームを形成しているかどうかを確認する必要があります。したがって、リスト要素が[1,2,3,2,1]のような場合、これは回文です。 これを解決するには、次の手順に従います- 高速:=ヘッド、低速:=ヘッド、回転:=なし、フラグ:=1 ヘッドが空の場合は、trueを返します 高速で次の高速が利用可能です next of fastが使用可能な場合は、フラグ:=0を設定し、ループを解除します fast:=next of the next of fast temp:=遅い、遅い:=次の遅い 次のtemp:

  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