пытаясь добавить метод prepend в связанный список - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать метод prepend, который берет значение и вставляет его между заголовком и следующим значением в связанном списке, и вот где я сейчас нахожусь, он печатает только <из-за печати заявление, а затем он печатает только 1: </p>

class Node:
        def __init__(self, value):
            self.value = value
            self.next = None


class LinkedList:

    def __init__(self):
        self.head = None

    def append(self, value):
        if self.head is None:
            self.head = Node(value)
            return

        # Move to the tail (the last node)
        node = self.head
        while node.next:
            node = node.next

        node.next = Node(value)
        return

    def prepend(self,value):
        if self.head is None:
            self.head = Node(value)
            return
        else:
            holder = None
            self.head.next = holder
            #holder.next = holder
            print(holder)
        return

linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(4)
linked_list.prepend(5)
node = linked_list.head
while node:
    print(node.value)
    node = node.next

Есть ли у вас какие-либо идеи, как это сделать или исправить мою логику c и, пожалуйста, объясните мне шаг за шагом, как вы пришли к решению. PS: я новичок.

1 Ответ

0 голосов
/ 31 марта 2020

Вот как вы можете это сделать:

class LinkedList:

    def __init__(self):
        self.head = None

    def append(self, value):
        if self.head is None:
            self.head = Node(value)
            return

        # Move to the tail (the last node)
        node = self.head
        while node.next:
            node = node.next

        node.next = Node(value)
        return

    def prepend(self,value):
        if self.head is None:
            self.head = Node(value)
            return
        else:
            oldhead = self.head
            self.head = Node(value)
            self.head.next = oldhead
        return

Обратите внимание, что даже если ваш метод добавления верен, он неэффективен, так как вам нужно будет увидеть все узлы в связанном списке, чтобы добавить элемент (поэтому O (n) для вставки вашего добавления) и то, что вы называете prepend, более эффективно, поскольку это O (1) для вставки элемента в связанный список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...