2016-06-30 8 views
0

私は以下のコードを持っています。私は最後のノードを削除しようとしています。しかし、ノードは削除されません。 tempはまだすべてdataを保持しています。私はそれを理解していない、Pythonでは割り当ての意味はdeep copy or shallow copy最後のノードがリンクされたリストを削除していないのはなぜですか?

class ll: 
    def __init__(self, data): 
     self.data = data 
     self.next = None 
    def adddata(self, data): 
     if not self.next: 
      self.next = ll(data) 
      return 
     self.next.adddata(data) 
def display(root): 
    if root == None: 
     return 
    print root.data 
    display(root.next) 

def delete_last(root): 
    temp = root 
    myfrontptr = root.next 
    while myfrontptr.next != None: 
     root = root.next 
     myfrontptr = myfrontptr.next 
    if root.next != None and myfrontptr.next == None: 
     del myfrontptr 
    return temp 

l = ll(1) 
l.adddata(5) 
l.adddata(3) 
l.adddata(2) 
l.adddata(0) 
l.adddata(4) 
l = delete_last(l) 
display(l) 
+1

「del」は「このオブジェクトを削除する」という意味ではありません。これは「この変数を設定解除する」ことを意味します。 'myfrontptr'ローカル変数の設定を解除しますが、それはリストに何もしません。 – user2357112

+0

変数を 'del'することはほとんど決して役に立たない。 – user2357112

+0

あなたの質問には関係ありませんが、古いスタイルのクラスを作成するのは奇妙に思えます。 Python 2.7では、必要ならば 'class ll(object)'を宣言する必要があります。新しいスタイルクラス –

答えて

2

delの代わりに、最後のノードの参照を解除する必要があります。

あなたが最後の要素が削除されたとき、最後の要素の前の要素にnext参照を設定するのを忘れ

if root.next != None and myfrontptr.next == None: 
    root.next = None 
+0

'del'は役に立たないでしょうか?はいの場合、 'myfrontptr'はまだメモリに残っています。だから、 'Python'はそれを自分で処理しますか?それとも削除する必要がありますか? –

+0

Pythonのガベージコレクタがそれを処理します。 'del'はリストや辞書からオブジェクトを削除したいときに主に使われます。 –

1

if root.next != None and myfrontptr.next == None: 
    del myfrontptr 

を交換してください:

def delete_last(root): 
    temp = root 
    myfrontptr = root.next 
    while myfrontptr.next != None: 
     root = root.next 
     myfrontptr = myfrontptr.next 
    if root.next != None and myfrontptr.next == None: 
     del myfrontptr # you don't need this, myfrontptr is a local name anyway 
     root.next = None 
    return temp 

deldoes not remove anything from memoryを。 C/C++のUnline、Python memory is freed by Garbage Collector。そしてC/C++でも、最後の要素のポインタ/参照を上書きする必要があります。

関連する問題