I want to create a class sort itself with add and remove function, here is my code:
class SortedList(object):
def __init__(self):
self.head=None
self.tail=None
def add (self, add_obj):
newNode=DLLNode(add_obj)
current=self.head
if current==None:
self.head=self.tail=newNode
else:
while add_obj>current.data:
current=current.next_node
newNode.next_node=current
newNode.prev_node=current.prev_node
current.prev_node.next_node=newNode
current.prev_node=newNode
def remove (self, element):
current=self.head
while element != current.data:
current=current.next_node
current.next_node.prev_node=current.prev_node
current.prev_node.next_node=current.next_node
current=None
I tried to run it but it failed. Could anyone let me know why?
Looking at the logic for your
add
function , I can see some problems -Once you have added an element, that is once your
self.head
andself.tail
are no longer -None
- , you are doing a while loop to find if theadd_obj
is greater thancurrent.data
. But the while loop is wrongly written. Lets assume , we have only put 1 element in the linked list, and we are trying to add a data that is greater thancurrent
,current
will becomecurrent.next_node
, which is currentlyNone
, then you again try to do same check, this time you try to accessdata
property ofNone
object which results inError
. Similar issue exists with your remove code.Secondly, in your add function, you are only taking care of greater than head, what if later on you add an object which is less than all other elements, you have to add it to the self.head , but that case is not handled.
You are not handling addition an element that is greater than all other elements in the list currently, in this case, I think you intended to make self.tail the element at the highest value, but you are not doing that either.