2016-12-27 9 views
0

リンクリストのノードを削除するための以下のコードは、削除したいインデックスの間違ったインデックスを削除するため動作しません。リンクリストからのノードの削除

class Node: 
    def __init__(self,data): 
     self.data=data 
     self.next=None 

class LinkedList: 
    def __init__(self): 
     self.head=None 
     self.tail=None 

    def Addnode(self,data): 
     new_node=Node(data) 
     if self.head==None: 
      self.head=new_node 
     if self.tail!=None: 
      self.tail.next=new_node 
     self.tail=new_node 

    def removenode(self,index): 
     new_n=self.head 
     count=0 
     while count!=index: 
      new_n=new_n.next 
      count+=1 
     new_n.next=new_n.next.next 
    def Printlist(self): 
     node=self.head 
     while node!=None: 
      print(node.data) 
      node=node.next 

List=LinkedList() 
List.Addnode(1) 
List.Addnode(2) 
List.Addnode(3) 
List.Addnode(4) 
List.removenode(1) 
List.Printlist() 

だから、これは2である、インデックス1、であるノードを削除する必要がありますが、代わりにそれは3を除去し、そしていずれかの1,2,4ともない5を出力しますか?私はなぜこれが起こっているのか混乱していますか?

+0

おそらくプログラミング言語タグを追加すると役に立ちます –

+1

これはPythonでですか? –

+0

はい、申し訳ありません。 – garfieldluva

答えて

2

あなたの削除機能が行き過ぎています。最初のノードを削除します(コード内のように)。

new_n=self.head 

new_nは現在ヘッドノードを指します。これが私たちが望むものなので、正しいです。

count=0 

カウントをゼロに初期化します。現在のノードはノード0なので、これも正しいです。

while count!=index: 
    new_n=new_n.next 
    count+=1 

ここで予期しない動作が発生します。最初の反復(0!= 1から)では、ループに入ります。今度はnew_nはリスト(インデックス1)の2番目の要素を指し、countは1です。

ここでループ条件をもう一度試します。 countは今度はindexに等しいので、私たちはループから脱出します。

電流new_n現在、リストの2番目の要素(インデックス1)を指しているので、new_n.next=new_n.next.nextは、次の要素は、その現在の次の次の要素であることに変わり。これは、リンクされたリストから要素を削除する方法ですが、1つの要素が離れています(リストをあまりにも遠くに移動しました)。

def removenode(self,index): 
    # catch the edge condition where we're removing the first node 
    if index==0 
     self.head = self.head.next 
    else 
     new_n=self.head 
     count=1 
     while count!=index: 
      new_n=new_n.next 
      count+=1 
     new_n.next=new_n.next.next 

免責事項:この問題を解決するために、次のコードを試してみてください私は、このコンピュータ上のPythonを持っていないので、私はコードをテストすることができないんだけど、うまくいけば、この方法でそれを破壊するのに役立ちます。

+0

うわー、ありがとうございました。それはあなたに感謝します! – garfieldluva

関連する問題