Listas Encadeadas
# Linked list
class Node:
def __init__(self, data=None,
next=None):
self.data = data
self.next = next
def __repr__(self):
return '%s :-> %s'%(self.data, self.next)
class LinkedList:
def __init__(self, head=None):
self.head = head
self.tail = None
self._size = 0
def __repr__(self):
return 'Head ->[%s] Tail ->[%s]'%(self.head, self.tail)
def __len__(self):
return self._size
@property
def size(self):
return self._size
def insert(self, data):
pointer = self.head
nova = pointer
aux = None
#print('head pointer', pointer)
if self.head==None:
self.head = Node(data)
self.tail = self.head
else:
while pointer.next != None:
pointer = pointer.next
pointer.next = Node(data)
self.tail = pointer.next
self._size = self._size + 1
nova = pointer
#print('size list', self._size)
#print(pointer)
def insert_in_index(self, index, elem):
pointer = self.head
count = 0
if index > self._size:
raise BaseException('Index out range list')
else:
while count < index - 1:
pointer = pointer.next
count = count + 1
no = Node(elem)
no.next = pointer.next
pointer.next = no
self._size = self._size + 1
def remove(self):
#del(self.tail)
corrente= self.head
ant = corrente
while corrente.next:
ant = corrente
corrente = corrente.next
ant.next = None
self.tail = ant
self._size -= 1
def walkfw(self, l):
#import copy
"""
Caminha pela lista recursivamente.
"""
#lis = copy.copy(self)
lis = l.head
corrente = lis
if corrente:
#print('. ', lis)
lis.head = corrente.next
self.walkfw(lis)
return corrente
def busca(self, dado):
corrente = self.head
pos = -1
while corrente.next:
pos += 1
if corrente.data == dado:
return pos
corrente = corrente.next
pos = -1
return pos
def removerc(self):
lis = self
corrente = lis
ant = corrente
if corrente.next:
pass
if __name__=='__main__':
l = LinkedList()
l.insert( 2)
l.insert(7)
l.insert(13)
print(f'> {l}\n\n')
l.insert_in_index(2, 21)
l.insert_in_index(1, 35)
print(f'> {l}\n')
print('size l', l.size)
print('len function ', len(l))
# Endereço de a
#a = 2
#print(id(a))
l.remove()
print(f'> {l}')
print(f' Size: {l.size}')
print('. ', l.walkfw(l))
print('busca ', l.busca(0) )
print('busca ', l.busca(35) )
print('busca ', l.busca(7))
Output:
> Head ->[2 :-> 7 :-> 13 :-> None] Tail ->[13 :-> None]
> Head ->[2 :-> 35 :-> 7 :-> 21 :-> 13 :-> None] Tail ->[13 :-> None]
size l 5
len function 5
> Head ->[2 :-> 35 :-> 7 :-> 21 :-> None] Tail ->[21 :-> None]
Size: 4
. 2 :-> 35 :-> 7 :-> 21 :-> None
busca -1
busca 1
busca 2