Menu
Coddy logo textTech

Practice #4

Lição 13 de 14 do curso Lista Encadeada - Série de Estruturas de Dados #5 da Coddy.

challenge icon

Desafio

Fácil

Dados dois arrays de inteiros ordenados a e b (os valores de duas listas encadeadas ordenadas), escreva uma função mergeSorted que retorne um único array ordenado contendo todos os valores de ambas as entradas.

Use uma lista encadeada para resolver este problema! Percorra ambas as listas em paralelo, pegando repetidamente o menor elemento inicial para o seu resultado.

Você deve usar a classe LinkedList (fornecida em linkedlist.<ext> junto com node.<ext>) — não use recursos integrados da linguagem, como inversão de arrays, fatiamento (slicing) ou operações de lista da biblioteca padrão (stdlib) para computar o resultado.

Experimente você mesmo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "solution.h"

int main() {
    char line1[8192];
    char line2[8192];
    if (!fgets(line1, sizeof(line1), stdin)) line1[0] = '\0';
    if (!fgets(line2, sizeof(line2), stdin)) line2[0] = '\0';
    int a[4096];
    int alen = 0;
    char* tok = strtok(line1, " \t\r\n");
    while (tok) { a[alen++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
    int b[4096];
    int blen = 0;
    tok = strtok(line2, " \t\r\n");
    while (tok) { b[blen++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
    int rs = 0;
    int* r = mergeSorted(a, alen, b, blen, &rs);
    for (int idx = 0; idx < rs; idx++) {
        if (idx > 0) printf(" ");
        printf("%d", r[idx]);
    }
    printf("\n");
    return 0;
}

Todas as lições de Lista Encadeada - Série de Estruturas de Dados #5