Considere uma lista encadeada com nó cabeça le definida
por células
typedef struct celula {
int dado;
struct celula *prox;
} celula;Faça uma função
void divide_lista (celula *l, celula *l1, celula *l2);que recebe uma lista encadeada encabeçada por l e a
divide em duas listas l1 e l2 de forma que
l1 contenha todos os numeros ímpares de
l (na ordem em que aparecem em l) e
l2 todos os números pares de l (na
ordem em que aparecem em l).
Observações
Você não deve alocar nenhuma nova célula na sua função, apenas
manipular os ponteiros dos nós de l para que estejam em
l1 ou l2.
Você deve considerar que os nós cabeça l1 e
l2 já foram alocados antes da chamada para a função
divide_lista.
Como consequência, a lista encabeçada por l não
estará intacta após a chamada à sua função.
Suponha, por exemplo, que a lista l seja
l -> 10 -> 4 -> -9 -> 2 -> 7 -> 10 -> NULL
Sua função deve devolver as listas
l1 -> -9 -> 7 -> NULL
e
l2 -> 10 -> 4 -> 2 -> 10 -> NULL