2016-01-28 2 views
0

Я новичок в Python, и у меня возникла проблема с реализацией функции для удаления последнего узла из связанного списка. Это код, который я до сих пор (я кодирование на онлайн-платформе под названием Coderunner, который уже содержит вводную код, реализованный для меня, например, класса Node):Удалить из хвоста связанного списка (Python)

class LinkedList: 

    def __init__(self): 
     self.head = None 

    def print_all(self): 
     current = self.head 
     while current != None: 
      print(current.get_data()) 
      current = current.get_next() 

    def add(self, item): 
     new_node = Node(item) 
     new_node.set_next(self.head) 
     self.head = new_node  

    def remove_from_tail(self): 
     current = self.head 
     prev = current 
     while current != None: 
      current = current.get_next() 
      prev.set_next(current.get_next()) 
      return current 

При выполнении следующего кода:

my_list = LinkedList() 
my_list.add('Car') 
my_list.add('Bike') 
my_list.add('Truck') 
result = my_list.remove_from_tail() 
print('Removed:', result) 
my_list.print_all() 

я получаю:

Removed: <__main__.Node object at 0x1063650> 
Bike 
Truck 

Можно ли предположить, где я пошло не так? Кажется, что объект узла печатается, но не значение внутри узла. Заранее спасибо за помощь!

+2

Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. [Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) применим здесь. Мы не можем эффективно помочь вам, пока вы не опубликуете свой код и не сможете точно описать проблему. Вы не включили класс ** Node **. Вы не включили код, который печатает «Удалено:». Вероятно, вы печатаете объект Node, а не его имя. – Prune

+0

Вы должны опубликовать класс 'Node'. –

+0

Класс Node не предоставляется мне, вместо этого код, который я реализую, должен работать с тем, что я предполагаю, будет общей реализацией класса Node в python. –

ответ

0

Значение, возвращаемое методом remove_from_trail, имеет тип Node. Когда вы печатаете его, вы печатаете объект Node. Вы должны получить доступ к значению внутри узла, вы можете использовать:

dir(result) 

, чтобы увидеть, какие методы и атрибуты делают объект есть, а затем вызвать атрибут, который вы ищете.

+0

Спасибо за быстрый ответ! Извините, я только что понял, что блок выходного кода не может быть отредактирован - это один из тестов, которые выполняются для проверки правильности моего кода. Поэтому код, который извлекается из функции remove_from_tail, должен быть в правильном формате для теста: result = my_list.remove_from_tail() –

0

Похоже, что этот код удалит все узлы из списка. Попробуйте что-нибудь вроде:

def remove_from_tail(self): 
    current = self.head 
    prev = current 
    while current.get_next() != None: #the last element will have next == None 
     prev = current 
     current = current.get_next() 
    # At this point, current will be pointing to the last element in the list 
    prev.set_next(None) 
    return current 
+0

Спасибо за быстрый ответ! Я попытался выполнить редактирование кода, но я все равно получаю то же самое. С учетом сказанного, один из «тестов», которые запускаются для проверки правильности моего кода, работает сейчас, и этот тест был следующим: 'my_list = LinkedList() my_list.add (800) my_list.add (700) my_list.add (600) my_list.add (500) my_list.remove_from_tail() my_list.print_all()» –

+0

к сожалению, код, используемый для тестирования успешно был: ' my_list = LinkedList() my_list.add (800) my_list.add (700) my_list.add (600) my_list.add (500) my_list.remove_from_tail() my_list.print_all() ' однако другой тестовый код:' my_list = LinkedList() my_list.add ('Car') my_list.add ('велосипед') my_list.add ('Грузовик') результат = my_list.remove_from_tail() print ('Удалено:', результат) my_list.print_all() ' все еще производит тот же результат. –

+0

@blue_eclipse Проблема заключается в 'print ('Удалено:', result)'. Попробуйте 'print ('Удалено:', result.get_data())' – Destruktor

Смежные вопросы