Pessoal, me ajudem! Estou muito ruim?

Pessoal, a dúvida é a seguinte:

Eu sou inciante em C e já tinha implementado listas encadeadas. Contudo, nunca tinha feito uma função que insere os elementos da lista em ordem crescente.

Eu pasei uma hora e meia tentando fazer esta função, mas sem sucesso (usando minha própria lógica).

Não conseguindo implentar corretamente, fui dar um “google” para ver como fazer e achei a função de um carinha.

Eu adaptei a função e consegui usar. Contudo, passei mais uma hora e meia tentando endentedê-la.

Enfim, é normal ficar se perdendo todo no código como eu fiquei (gastei quase 3 horas) para implementar e entender uma função simples como essa?

Para quem tem mais experiência aí: É normal ficar praticamente “cego” diante de códigos até simples no início?

Eu olhava o código, entendia uma parte e logo acabava voltando tudo do começo.

E qual foi a experiência de vocês? Vocês já demoraram tanto assim (quase 3 horas) para enteder o algoritmo que está logo abaixo? (Ou um similar em dificuldade?)

OBS: Tenho 1 ano de programação, mas pratico pouco. Começei a praticar mais mês passado.
OBS2: O algoritmo está escrito na liguagem C.

Node* insertCorrectNode(Node *first, int i) {
    Node *prev, *current, *newNode, *returnNode;
    newNode = (Node*)malloc(sizeof(Node));
    newNode->i = i;
    current = first;
    returnNode = first;
    if(current == first) prev = NULL;
    if(current == NULL) {
        newNode->next = NULL;
        return newNode;
    }
    else {
         while(current != NULL && current->i < i) {
            prev = current;
            current = current->next;
         }

         newNode->next = current;

         if(prev == NULL) {
            return newNode;
         }
         else {
            prev->next = newNode;
            return returnNode;
         }

    }
}

Relaxa cara, é assim mesmo. Lógicas de programação a gente vai pegando com o tempo, e esse algorítimo não é simpleszinho tb.

Eu recomendo tentar mais ainda, antes de procurar solução. Isso vai te ajudar a criar mais raciocínio lógico e ser cada vez mais rápido nas próximas. Algorítimo não é fácil, é preciso muito treino, muita prática e muito estudo de código.

1 curtida

Tem duas coisa que vai facilitar você mesmo resolver esse problema, uma delas se chama teste de mesa, isso você faz no papel e o outro e debugar o código, pois com o debug vai ser possível você saber como está sendo tratado os registros de entrada e saída.

https://netbeans.org/kb/docs/cnd/debugging.html

1 curtida

Obrigado pela ajuda igor. Já estava ficando preocupado e me achando lento demais. Pelo visto, isso é normal com todo mundo.

Eu já faço o teste de mesa, contudo nao sabia que tinha esse nome. O problema, para mim, surge exatamente porque até no papel, antando as variáveis e tal, eu fico me perdendo às vezes. Quanto à debuggar, eu nunca fiz, vou procurar mais a respeito. Obrigado pela ajuda.

1 curtida