Дважды связанный список с Python - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь реализовать двусвязный список в python, но не могу правильно выполнить удаление.

def deleteFromBeginning(self):
    if self.listLength()==0:
        print("Can't delete from an empty list")
    else:
        self.head = self.head.next

def deleteFromEnd(self):
    if self.listLength() ==0:
        print("Can't delete from an empty list")
    else:

        current=self.head
        while(current.next!=None):
            current.prev = current
            current = current.next

        current.prev.next = None
        current.prev = None

def deleteFromPosition(self,pos):
    if pos> self.listLength() or pos<0:
        ValueError("Enter a valid position")
    elif pos==0:
        deleteFromBeginning()
    elif pos == self.listLength():
        deleteFromEnd()
    else:
        if self.listLength()==0:
            print("Can't delete from an empty list")
        else:
            current=self.head
            count = 1
            while(current.next!=None and count<pos):
                current = current.next
                count = count+1

            current.prev.setNext(current.next)
            current.next.setPrev(current.prev)
            current.setPrev(None)
            current.setNext(None)

def deleteWithData(self,data):
    if self.listLength()==0:
        ValueError("Can't delete from an empty list")
    else:
        current = self.head
        while current.next!=None:
            if current.data == data:
                current.prev.next = current.next
                current.next.prev = current.prev
                return
            else:
                current = current.next
        print("The value provided is not present")

Удаление из начала и конца работает нормально, но удаление с позицией и данными не выполняется давая желаемые результаты. Screenshot of the output

1 Ответ

0 голосов
/ 13 февраля 2020

Один небольшой рефакторинг, который я бы сделал, - переместите ваш

if self.listLength()==0:
            print("Can't delete from an empty list")

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

Кроме этого, вы можете попробовать отслеживать предыдущий узел:

while(current.next!=None and count<pos):
                temp = current
                current = current.next
                count = count+1

        temp.setNext(current.next)
        current.next.setPrev(temp)

Это должно удалить узел в положение х, связывая предыдущий узел со следующим узлом.

Не проверял его, дайте мне знать, как он работает!

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