[Python] Python Linked List - AttributeError: 'NoneType' object has no attribute 'get_data'...

Discussão em 'Python' iniciado por Stack, Outubro 3, 2024.

  1. Stack

    Stack Membro Participativo

    I'm new to python and have been trying to learn simple data structures. I've been able to hack together some functions for a linked list and have been having trouble with my delete function. Heres list with the function in question and the test case: class Node: def init(self, initial_data): self.data = initial_data self.next = None

    def get_data(self):
    return self.data

    def get_next(self):
    return self.next

    def set_data(self, new_data):
    self.data = new_data

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


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

    def __str__(self):
    output_string = ''

    current = self.head
    while current is not None:
    output_string += str(current.get_data())
    next_node = current.get_next()
    #gives the pointer to the next node i.e. the next node is that which is next to the current

    if next_node is not None:
    output_string += "->"

    current = next_node

    return output_string
    #does not need to be changed for ordered linked list
    def is_empty(self):
    if self.head is None:
    return True
    else:
    return False
    def insert(self, data):
    current = self.head
    previous = None
    stop = False
    while current != None and not stop:
    if current.get_data() > data:
    stop = True
    else:
    previous = current
    current = current.get_next()
    temp = Node(data)
    if previous == None:
    temp.set_next(self.head)
    self.head = temp
    else:
    temp.set_next(current)
    previous.set_next(temp)



    #does not need to be changed for ordered linked list
    def size(self):
    current = self.head
    count = 0
    while current != None:
    count += 1
    current = current.get_next()
    return count
    def search(self, item):
    current = self.head
    found = False
    stop = False

    while current is not None and not found and not stop:
    if current.get_data() == item:
    found = True

    else:
    current = current.get_next()
    return found

    def delete(self, item):
    current = self.head
    previous = None
    found = False

    while not found:
    if current.get_data() == item:
    found = True
    else:
    previous = current
    current = current.get_next()

    if previous is None:
    self.head = current.get_next()
    else:
    previous.set_next(current.get_next())

    def test_nonexistent():
    my_list = LinkedList()
    my_list.insert(31)
    my_list.insert(77)
    my_list.insert(17)
    my_list.insert(93)
    my_list.insert(26)
    my_list.insert(54)
    assert my_list.size() == 6
    my_list.delete(77)
    my_list.delete(1)
    assert my_list.size() == 5


    I get the error message


    "AttributeError: 'NoneType' object has no attribute 'get_data' with delete Function"
    ​

    I believe there is something wrong with the delete function as it can't handle a value thats isn't in the list, but I'm stumped as to how to get it to work at this point. Any help is appreciated!

    Continue reading...

Compartilhe esta Página