2017-11-14 19 views
0

私のように生成された単独リンクリストがあるとします。単独リンクリストからインデックス値を取得することはできますか?

# Singly Linked List 
class node: 
    def __init__(self,data=None): 
    self.data=data 
    self.next=None 

class linked_list: 
    def __init__(self): 
    self.head=node() 

# Adds new node containing 'data' to the end of the linked list. 
    def append(self,data): 
    new_node=node(data) 
    cur=self.head 
    while cur.next!=None: 
     cur=cur.next 
    cur.next=new_node 

# Returns the length (integer) of the linked list. 
    def length(self): 
    cur=self.head 
    total=0 
    while cur.next!=None: 
     total+=1 
     cur=cur.next 
    return total 

# Prints out the linked list in traditional Python list format. 
    def display(self): 
    elems=[] 
    cur_node=self.head 
    while cur_node.next!=None: 
     cur_node=cur_node.next 
     elems.append(cur_node.data) 
    print elems 

# Returns the value of the node at 'index'. 
    def get(self,index): 
    if index>=self.length(): 
     print "ERROR: 'Get' Index out of range!" 
     return None 
    cur_idx=0 
    cur_node=self.head 
    while True: 
     cur_node=cur_node.next 
     if cur_idx==index: return cur_node.data 
     cur_idx+=1 

# Deletes the node at index 'index'. 
    def erase(self,index): 
    if index>=self.length(): 
     print "ERROR: 'Erase' Index out of range!" 
     return 
    cur_idx=0 
    cur_node=self.head 
    while True: 
     last_node=cur_node 
     cur_node=cur_node.next 
     if cur_idx==index: 
      last_node.next=cur_node.next 
      return 
     cur_idx+=1 

#Allows for bracket operator syntax (i.e. a[0] to return first item). 
    def __getitem__(self,index): 
    return self.get(index) 


    def getindex(self,data): 
    cur_node = self.data 
    while True: 
     cur_node = cur_node.next 
     if cur_node == data: 
      return cur_node.index 
      break 
     index +=1 

をとして、私は単独でリンクリストを作成するとします。

new_list = linked_list() 
new_list.append(5) 
new_list.append(6) 
new_list.append(8) 

がインデックス1(Iは、リスト内の2番目の値を削除するとします)は6という値になりますが、6のインデックスは何か分かりません。インデックス値6を見つけて6を削除するにはどうしたらいいですか?または、インデックス値を知らなくても単一リンクリストから値を削除する別の方法がありますか?

EDIT:

はAttributeError:「NoneType」オブジェクトが属性「次へ」を持っていない私は、ノードが指定されているが、私はこのエラーを得ているとき、理論的にインデックスをつかむ必要がありますgetindexと呼ばれる新しいモジュールを追加しました。 getindexモジュールのcur_node = cur_node.next行を参照します。このエラーを修正するにはどうすればよいですか?

+0

。 –

+0

@ Q.Holnessインデックスを表すためにノードに属性を追加するにはどうすればよいですか? – superasiantomtom95

+0

'get'関数では' data'を返す代わりに 'index'を返すのではなく、' index' compare 'data'を比較するのではなく、ほとんど準備ができています。 – scope

答えて

-1

これはあなたが必要とする機能である:

def getIndex(self,data): 
    cur_idx=0 
    cur_node=self.head 
    while cur_node.next: 
     cur_node=cur_node.next 
     if cur_node.data==data: return cur_idx 
     cur_idx+=1 
    return None 

そして、あなたはこのようにそれを使用します。.append()が呼び出されたときには、インデックスを表し、ノードに属性を追加することができ

new_list = linked_list() 
new_list.append(5) 
new_list.append(6) 
new_list.append(8) 
new_list.display() 
idx = new_list.getIndex(6) 
if idx != None: 
    new_list.erase(idx) 
new_list.display() 
関連する問題