2017-03-13 15 views
0

中間のノードを削除しようとしていますが、関数を呼び出して、指定されたノードの後に​​2番目のノードを保持しようとすると、Noneと表示されます。以下は私のコードです、それを修正するのを助けてください。リンクリストの途中でノードを削除します。ノードへのアクセスのみが指定されています。 - Python

class Node: 
    # Constructor to initialize the node object 
    def __init__(self, data): 
     self.data= data 
     self.next= None 

class LinkedList(): 

    # Function to initialize head 
    def __init__(self): 
     self.head = None 

    # Function to insert a new node at the beginning 
    def insert(self, data): 
     node = Node(data) 
     node.next=self.head 
     self.head = node 

    # Function to print elements of the linked list  
    def printlist(self): 
     current = self.head 
     while current: 
      print current.data 
      current = current.next 

    def deleteMiddle(self, node): 
     second = node.next 
     print second.data 
     if node is None: 
      return 
     node.data = second.data 
     node.next = second.next 

llist = LinkedList() 
llist.insert(10) 
llist.insert(15) 
mid = Node(20) 
llist.insert(mid.data) 
llist.insert(16) 
llist.insert(17) 
llist.insert(19) 
print "Before deleting middle or any node" 
llist.printlist() 
print "After deleting middle or any node" 
llist.deleteMiddle(mid) 
llist.printlist() 

アップデート1:私は変化の下に追加されている、それが正常に動作しています。しかし、それが正しいと(挿入とaddNode関数)1つの関数に結合することができる場合、知りたい。また、このコードを書くより良い方法を理解したいと思います。どこのノードを削除したい場合もあり、そのノードだけにアクセスできるケースがあります。私のコードでは、ノードを定義してそれを削除していますが、自分のコードよりも優れたアプローチが必要だと感じています。

def addNode(self, node): 
     node.next = self.head 
     self.head = node 

llist.addNode(mid) 

答えて

0

すぐにバットをオフにすると、ノード自体ではなく、中間ノードmidからデータを追加するように見えます。 midを削除しようとすると、完全に同じノードではないため、リンクされたリストのノードはmidのようになります。また

、あなたのNodeを追加することを選択することができNodeの代わりdataをとり、新たな挿入機能を作成することによって、midと呼ばれます。

すなわち、def insert(self, node):

+0

私は新しいデータ構造をしていますので、私はUpdate 1の実装とそれが正常に動作しています。 Update 1をチェックし、それが正しい方法であれば教えてください。また、insertとaddNode関数を1つに変更できるかどうかを教えてください。 –

+0

いいですね。現在、ノードの追加機能は、ノードを先頭に配置します。私は、指定されたポイントにリストをトラバースする関数を書くことをお勧めします(リスト内の3番目のノードを見つけることを想像してください)。これを理解すると、リンクされたリストの任意の場所にノードを挿入するコードを記述することができます。 あなたのコードが何をしているかを描くことも検討してください。データ構造をコーディングする際に特に役立つビジュアライゼーションが見つかりました。 – lordluen

0

あなたが実際にリンクされたリストにあなたのmidノードを挿入しませんでした。その代わりに、新しいノードを同じデータ値でリストに挿入しました。 midで行うことは、リストに接続していないため、あなたのリストに何の影響も与えません。

関連する問題