Merge em listas

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 :frowning: ), 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.
	}