Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class LinkedList(object):
- __slots__ = ['__head', '__tail', '__current', '__size']
- class Node(object):
- __slots__ = ['__data', '__next']
- def __init__(self, data, next = None):
- self.__data=data
- self.__next=next
- def getData(self):
- return self.__data
- def getNext(self):
- return self.__next
- def setData(self, data):
- self.__data = data
- def setNext(self, next):
- self.__next = next
- def __str__(self):
- data = str(self.__data)
- def __init__(self):
- self.__head = None
- self.__tail = None
- self.__current = None
- self.__size = 0
- def getHead(self): #: Return first node's values and "IndexError" if the list is empty
- if self.__head != None:
- return self.__head.getData()
- else:
- raise IndexError, ('Empty List')
- def getTail(self):
- if self.__tail != None:
- return self.__tail.getData()
- else:
- raise IndexError,('Empty List')
- def getCurrent(self):
- if self.__current != None:
- return self.__current.getData()
- else:
- raise IndexError,('Empty List')
- def moveNext(self):
- if (self.__tail != self.__current) or (self.__head != None) :
- self.__current=self.__current.getNext()
- else:
- raise IndexError,('Empty list or current node is the tail node')
- def moveHead(self):
- if self.__head != None :
- self.__current=self.__head
- print 'hola'
- else:
- raise IndexError,('Empty list')
- def isEmpty(self):
- return self.__head == None
- def size(self):
- return self.__size
- def clear(self):
- self.moveHead()
- while (self.__size != 0):
- self.remove()
- self.__current = None
- def insertBefore(self, data):
- nodeAux =self.Node(data)
- if self.__head == None:
- self.__head = nodeAux
- self.__current = nodeAux
- self.__tail = nodeAux
- elif self.__current == self.__head:
- nodeAux.setNext(self.__current)
- self.__head==nodeAux
- else:
- nodeAux=self.__head
- while self.__current != nodeAux.getNext():
- nodeAux=nodeAux.getNext()
- nodeAux.setNext(self.__current)
- self.__current=nodeAux
- self.__size +=1
- def insertAfter(self, data):
- newNode= self.Node(data) #Create the NewNode with the data value
- if self.__head == None:
- self.__head = newNode
- self.__current = newNode
- self.__tail = newNode
- elif self.__current == self.__tail:
- self.__current.setNext(newNode) # Now, the self.__current has to point his next "lisk" to the NewNode
- self.__current=newNode # Now the newMode is the TAIL node, if I use _current node to equaling it with newMode I will being moving the current node one posicion
- self.__tail = newNode
- else:
- newNode.setNext(self.__current.getNext()) # Link the next pointer of the NewMode to the Next of self.__current
- self.__current.setNext(newNode) # Now, the self.__current has to point his next "lisk" to the NewNode
- self.moveNext()
- self.__size +=1
- def remove(self):
- removeNode=self.Node(None)
- if self.__current == self.__head:
- self.__head = removeNode
- self.__current = removeNode
- elif self.__current == self.__tail:
- self.__current = removeNode
- self.__tail = removeNode
- elif self.__current == None and self.__head == None and self.__tail == None:
- raise IndexError,('Empty list, Cannot remove the NODE')
- else:
- removeNode = self.__head
- while self.__current != removeNode.getNext():
- removeNode=removeNode.getNext()
- self.__current=removeNode
- removeNode = removeNode.getNext()
- removeNode = None
- self.__size -=1
- def __str__(self):
- List = 'ListOfNodeDatas -->'
- recorrer = self.__head
- while node != None:
- List = List + str(recorrer.data)
- if recorrer.next != None:
- List = List + ' && '
- recorrer = recorrer.next
- return List
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement