2017-03-21 7 views
-1
class _ListNode: 

    def __init__(self, value, next_): 

     self._data = value 
     self._next = next_ 
     return 


class List: 

     def __init__(self): 

     self._front = None 
     self._count = 0 
     return 

     def _linear_search(self,key): 
      previous = None 
      current = self._front 
      index = 0 

      while current is not None and key > current._data: 
       previous = current 
       current = current._next 
       index += 1 
      if current._data != key: 
      previous = None 
      current = None 
      index = -1 

     return previous, current, index 



    def __contains__(self, key): 

      _, _, i = self._linear_search(key) 
      return i != -1 

     def append(self, value): 

      if self._front is None: 
       self._front = _ListNode(value,None) 
      else: 
       self._front._next = _ListNode(value,None) 
      self._count += 1 

    l = List() 
    lst = [1,2,3,4] 
    i = 0 
    n = len(lst) 
    while i < n: 
     l.append(lst[i]) 
     i += 1 
    print("{}".format(l.__contains(3))  

詳細は、線形検索メソッドとcontainsメソッドを実装します。 containsメソッドは、数値がリストにあるかどうかをチェックします(trueまたはfalseを返します)。今、私がリスト中の#3をcontainsメソッドを使ってチェックする必要があるとき、答えはfalseです!!私は何が問題なのか分からないリンクリストの追加メソッド

+2

問題を再現するために実際に使用できる[mcve]を付けてください。 – jonrsharpe

+1

それは本当に役に立たなかった。ヘルプセンターのリンク先ページをお読みください。あなたの質問からコードをコピーアンドペーストして実行し、あなたが記述したものと同じ出力を見ることができるはずです。 – jonrsharpe

+2

あなたの編集はあなたのコードを改善しましたが、 'List'を出力するメソッドがまだありません。そのコードを実行すると、 'print(l)'は '<__ main __。List instance at 0x283A148>'のようなものを出力します。 – vyrp

答えて

0

あなたの追加メソッドはリストを歩いていません。 self.frontが既に存在する場合は、常にself._front._nextに付加されます。つまり、最初に追加したもの、最後に追加したもの、間にないものを意味します。 Noneに等しい_nextを探してリストを歩くと、そこに追加し、それを修正するために、

。あなたはまた、List

例えばの内容を印刷する_str__メソッドを定義することができ

def append(self, value): 

    if self._front is None: 
     self._front = _ListNode(value, None) 
    else: 
     n = self._front 
     while n._next is not None: 
      n = n._next 
     n._next = _ListNode(value, None) 

    self._count += 1 

def __str__(self): 
    res = [] 
    n = self._front 
    while n is not None: 
     res.append(str(n._data)) 
     n = n._next 

    return ', '.join(res) 

それは中間組み込みlistオブジェクトを構築し、これは特に効率的な実装ではありません。

また、あなたの方法でそれらの裸return文は必要ありません。あなたはそれらを削除することができます。

+0

ありがとう:D –

+0

は素晴らしいし。それが有益な答えだったら、あなたは受け入れてupvoteすることができます。私はあなたの質問を編集したと思っています。どうかこの答えが間違っているかどうか教えてください。 –

+0

リストから#3を削除して(たとえば)、別の時間を追加してリスト内の答えが偽であるかどうかを確認してください!! –

関連する問題