From b0c719ac760174d89f3167a942accf4ac5870f3a Mon Sep 17 00:00:00 2001
From: Jonas Rocha <jonasra4@gmail.com>
Date: Wed, 12 Sep 2018 08:17:15 -0300
Subject: [PATCH] Add new file

---
 lista.py | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 136 insertions(+)
 create mode 100644 lista.py

diff --git a/lista.py b/lista.py
new file mode 100644
index 0000000..d9de635
--- /dev/null
+++ b/lista.py
@@ -0,0 +1,136 @@
+class NodoLista:
+    """Esta classe representa um nodo de uma lista encadeada."""
+    def __init__(self, dado=0, proximo_nodo=None, anterior_nodo = None):
+        self.dado = dado
+        self.proximo = proximo_nodo
+        self.anterior = anterior_nodo
+
+
+class ListaEncadeada():
+    """Esta classe representa uma lista encadeada."""
+    def __init__(self): 
+        self.cabeca = None
+
+    def __repr__(self):
+        return "[" + str(self.cabeca) + "]"
+
+    def print_lista(self):
+        corrente = self.cabeca
+        print("[ " , end="")
+        while corrente.proximo != None:
+            print( str(corrente.dado), "-> <- ", end="")
+            corrente = corrente.proximo
+        print(corrente.dado,"]\n")
+
+
+
+def insere_no_inicio(lista, novo_dado):
+   
+    if lista.cabeca == None:
+        novo_nodo = NodoLista(novo_dado)
+        novo_nodo.proximo = None
+        novo_nodo.anterior = None
+        lista.cabeca = novo_nodo
+    else:
+        novo_nodo = NodoLista(novo_dado)
+        first = lista.cabeca
+        novo_nodo.proximo = first
+        novo_nodo.anterior = None
+        first.anterior = novo_nodo
+        lista.cabeca = novo_nodo
+
+
+def swap(lista, valor1, valor2):
+    a = busca(lista,valor1)
+    b = busca(lista,valor2)
+
+    if id(a) < id(b):
+        temp = a
+        a = b
+        b = temp
+
+    if a.anterior == None and a.proximo == b:   #juntos no comeco
+        lista.cabeca = b
+        a.proximo = b.proximo
+        a.anterior = b
+        b.anterior = None
+        b.proximo = a
+    
+    elif b.proximo == None: #juntos no final
+        b.anterior = a.anterior
+        b.proximo = a 
+        a.anterior.proximo = b
+        a.anterior = b
+        a.proximo = None
+
+
+    elif a.anterior != None and b.proximo != None and a.proximo == b and b.anterior == a:  #juntos no meio
+        a.anterior.proximo = b
+        b.proximo.anterior = a
+        b.anterior = a.anterior
+        a.proximo = b.proximo
+        a.anterior = b 
+        b.proximo = a
+
+
+    elif a.anterior == None and b.proximo != None and a.proximo == b and b.anterior == a: # cabeca e meio
+        
+        lista.cabeca = b 
+
+        a.proximo.anterior = b 
+
+        aux = a.proximo 
+
+        a.proximo = b.proximo
+        a.anterior = b.anterior
+
+        b.anterior.proximo = a
+        b.proximo.anterior = a
+
+        b.proximo = aux
+        b.anterior = None
+
+    elif a == b:
+        print("Posicoes iguais, ou seja, o mesmo node")
+
+
+
+
+def busca(lista, valor):
+    corrente = lista.cabeca
+    while corrente and corrente.dado != valor:
+        corrente = corrente.proximo
+    return corrente
+
+
+items = [10,9,8,7,6,5,4,3,2,1]
+
+
+
+lista = ListaEncadeada()
+
+for i in items:
+	insere_no_inicio(lista, i)
+
+
+print("Lista Original:")
+lista.print_lista()
+
+
+print("juntos no comeco", 1, 2)
+swap(lista,2,1)
+
+lista.print_lista()
+
+print("juntos no final", 9, 10)
+swap(lista,10,9)
+lista.print_lista()
+
+print("juntos no meio", 5, 6)
+swap(lista,6,5)
+lista.print_lista()
+    
+print("comeco e meio", 2, 5)
+swap(lista,2,5)
+lista.print_lista()
+    
\ No newline at end of file
-- 
GitLab