# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
import numpy as np
class No(object):
    def __init__(self, valor=None, proximo=None):
        self.valor = valor
        self.proximo = proximo #por default tem valor None, NULL como em C, NIL como em Pascal
    def __str__(self):
        return str(self.valor)
    
    #def __repr__(self):
    #    return str(self.valor)

def imprimeLista(no):
    while no:
        print(no, end='') #evita de pular linha no próximo print
        no = no.proximo                
        if no!= None:
            print(', ', end='')

#
#         | inicioLista  |--> ... | anterior |-->|   atual  |--> ...|  final  |--x
#         
#
    
numeros=np.random.randint(0,1000, size=200)
print('\nNumeros não ordenados:')
print(numeros)
    
#numeros=np.array([803, 825, 237, 365, 967, 173, 736, 725, 937, 724])
n=numeros.size
inicioLista=None #Inicialmente inicioLista aponta para vazio
for num in numeros:
    novo=No(num) #cria novo com proximo None (vazio)
    atual=inicioLista
    anterior=None
    #while atual é o mesmo que while atual != None
    while atual and (num>atual.valor): #percorre ate esteja apontando para vazio
        anterior=atual
        atual=atual.proximo
        
    if anterior==None: #inserir na cabeça da lista
        novo.proximo=inicioLista
        inicioLista=novo
    else:              #inserir no meio ou no fim
        novo.proximo=atual
        anterior.proximo=novo
print('\nNumeros ordenados:')        
imprimeLista(inicioLista)

    
    