2015-12-17 2 views
3

Я пишу код для связанного списка в Python и вот часть кода:Python LinkedList Поиск

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

    def search(self, n, value): 
     if n is None: 
      return False 
     elif n.data == value: 
      return True 
     else: 
      return search(n.next, value) 

    def append(self, new_value): 
     if self.head is None: 
      self.head = LinkedListNode(new_value) 
     else: 
      node = self.head 
      while node.next != None: 
       node = node.next 
      node.next = LinkedListNode(new_value) 

    def remove(self, position): 
     if position > 0: 
      node = self.head 
      l = 0 
      while node != position - 1: 
       l += 1 
       node = node.next 
      node.next = node.next.next 
     elif position == 0: 
      self.head = self.head.next 

Я просто интересно, как реализовать метод search()? Я думаю, что у меня есть правильная идея, но она не работает. Спасибо!

ответ

3

Когда вы вызываете метод внутри того же класса, вам необходимо получить его с помощью self.

def search(self, n, value): 
    if n is None: 
     return False 
    elif n.data == value: 
     return True 
    else: 
     return self.search(n.next, value) # <-- 

BTW, текущая search реализация требует пользователю передавать n (LinkedList.head возможно). Поэтому я бы сделал обертку для поиска из головы, поэтому пользователю не нужно указывать linked_list_instance.head каждый раз:

def search_from_head(self, value): 
    return self.search(self.head, value) 
Смежные вопросы