Узел добавляется дважды в список - PullRequest
0 голосов
/ 11 октября 2018

Это мой код игнорировать, если какой-либо из пробелов не так, код прекрасно работает в Python.

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

    def __str__(self):
        return "Node({})".format(self.value)

    def getNext(self):
        return self.next

    def getValue(self):
        return self.value

    def setNext(self, new_next):
        self.next = new_next

    def setValue(self, new_value):
        self.value = new_value


    __repr__ = __str__



class OrderedLinkedList:
    def __init__(self):
        self.head=None
        self.tail=None
        self.count = 0

    def __str__(self):
        temp=self.head
        out=[]
        while temp:
            out.append(str(temp.value))
            temp=temp.next
        out=' '.join(out)
        return ('Head:{}\nTail:{}\nList:{}'.format(self.head,self.tail,out))

    __repr__=__str__

    def add(self, value):
        #write your code here

        if self.head == None:
            new_node = Node(value)
            self.head = new_node
            self.tail = self.head
            self.head.setNext(self.tail)


        if self.head.value > value:
            new_node = Node(value)
            new_node.value = value
            new_node.next = self.head
            self.head = new_node

        else:
            new_node = Node(value)
            self.tail.setNext(new_node)
            self.tail = new_node

        self.count += 1




    def pop(self):
        #write your code here
        if self.head == None:
            return 'List is empty'

        if len(self) == 1:
            value = self.head.getValue()
            self.head = None
            self.tail = None
            self.count = 0
            return value

        current = self.head
        while current.next is not self.tail:
            current = current.getNext()

        value = self.tail.getValue()
        self.tail = current
        self.tail.next = None

        self.count -= 1
        return value






    def isEmpty(self):
        #write your code here
        return self.head == None

    def __len__(self):
        #write your code here
        return self.count

Единственная проблема, с которой я столкнулся, заключается в том, что при первом использовании функции add она добавляет число дважды.Ниже приведен результат, когда я впервые звоню добавить каждый раз, после этого он добавляет номер только один раз.Как я могу это исправить, чтобы он только добавлял первое число один раз вместо двух.

>>> x=OrderedLinkedList()
>>> x.add(2)
>>> print(x)
Head:Node(2)
Tail:Node(2)
List:2 2

add (item) добавляет новый узел со значением = item в список, гарантируя, что порядок возрастания сохраняется.Ему нужен товар и ничего не возвращается.

1 Ответ

0 голосов
/ 11 октября 2018

Да, он добавляет первое число дважды, так как вам нужно исправить ошибку в вашем методе add, добавив elif:

def add(self, value):
   if self.head == None:
        new_node = Node(value)
        self.head = new_node
        self.tail = self.head
        # self.head.setNext(self.tail) ## remove to prevent infinity loop


    elif self.head.value > value:
        new_node = Node(value)
        new_node.value = value
        new_node.next = self.head
        self.head = new_node

    else:
        new_node = Node(value)
        self.tail.setNext(new_node)
        self.tail = new_node

Так как, если голова равна None один разданные добавляются, тогда следующее условное выражение всегда выполнит одну из двух частей на if или else.

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