Boa noite,
Estou tentando fazer um exercício de Lista Encadeada(e ta difícil), se alguém opuder auxiliar agradeço…
Eu tenho uma lista de genéricos pronta, quero inserir nela o método proposto…Estamos aprendendo e fazendo tudo “no braço”, sei que tem linkedList e etc… mas temos que fazer na mão…
essa é a que tenho implementada funcionando…“não vou pôr aqui porque é grande…”
public class ListaEncadeadaSimples<E> implements ListTAD<E>
Quero fazer um método que faz o que o enunciado abaixo pede:
“Altere a implementação de lista encadeada de maneira a inserir um método chamado void merge(ListTAD lst). Este método recebe uma instância de ListTAD(lst) por parâmetro e mescla a lista corrente com a lista ?lst? recebida inserindo um elemento de ?lst? entre cada um dos elementos da lista original. Se ?lst? for menor que a lista original, serão inseridos todos os elementos que houverem e o restante da lista original permanece como está. Se ?lst? for maior que a lista original intercala-se enquanto possível e depois anexa-se os elementos de ?lst? restantes no final. Escreva a rotina e um exemplo de uso.”
Não sei se é mais fácil criar uma 3ª lista ou dá pra ir trocando as referências do 1º de uma parta o 1º de outra, depois do 2º de uma pro 2º da outra…
Grato,
[quote=jefers0n]Boa noite,
Estou tentando fazer um exercício de Lista Encadeada(e ta difícil), se alguém opuder auxiliar agradeço…
Eu tenho uma lista de genéricos pronta, quero inserir nela o método proposto…Estamos aprendendo e fazendo tudo “no braço”, sei que tem linkedList e etc… mas temos que fazer na mão…
essa é a que tenho implementada funcionando…“não vou pôr aqui porque é grande…”
public class ListaEncadeadaSimples<E> implements ListTAD<E>
Quero fazer um método que faz o que o enunciado abaixo pede:
“Altere a implementação de lista encadeada de maneira a inserir um método chamado void merge(ListTAD lst). Este método recebe uma instância de ListTAD(lst) por parâmetro e mescla a lista corrente com a lista ?lst? recebida inserindo um elemento de ?lst? entre cada um dos elementos da lista original. Se ?lst? for menor que a lista original, serão inseridos todos os elementos que houverem e o restante da lista original permanece como está. Se ?lst? for maior que a lista original intercala-se enquanto possível e depois anexa-se os elementos de ?lst? restantes no final. Escreva a rotina e um exemplo de uso.”
Não sei se é mais fácil criar uma 3ª lista ou dá pra ir trocando as referências do 1º de uma parta o 1º de outra, depois do 2º de uma pro 2º da outra…
Grato,
[/quote]
Boa noite pessoal,
Consegui o queria, embora tenha sido o professor que passou na aula(eu não tinha conseguido concluir ), caso alguém tenha a mesma dúvida, vai aí a resolução para quem ta aprendendo estruturas de dados e quer fazer o merge das listas “na mão” …
public void merge(ListSimpleLinked<E> lst) {
ListSimpleLinked<E> aux = new ListSimpleLinked<E>();
Node<E> target1 = this.head;
Node<E> target2 = lst.head;
int maior = Math.max(this.size(), lst.size());
for(int i=0; i<maior; i++) {
if(target1 != null) {
aux.add(target1.getItem());
target1 = target1.getNext();
}
if(target2 != null) {
aux.add(target2.getItem());
target2 = target2.getNext();
}
}
this.head = aux.head; //início da lista(referência para o primeiro elemento
this.tail = aux.tail; //final da lista(referência para o último elemento
this.count = aux.count; //qtd elementos na lista.
}