Задание составить свою реализацию односвязного или двусвязного списка объектов, но при этом нельзя использовать стандартные реализации типа LinkedList.
Написать методы глубокого клонирование этого списка, проверить как клонируется лист. Для создания копии нельзя использовать конструктор класса. При удалении элементов из копии списка при этом оригинал списка не должен измениться, то есть копии должны быть полностью независимы друг от друга.
Какие способы будут оптимальны? Написал кучу кода, все вроде бы работает кроме глубокого клонирования.
При изменении списка возникает куча глюков :-(
//List as FILO stack
public class MyLinkedList implements Cloneable, Serializable
{
private Node objects; // top of stack
private Node first; // bottom of stack
...
Внутренний класс Node
// FILO
class Node implements Cloneable {
private Object o;
private Node next;
private Node prev;
public Node(Object o) {
if (o !=null){
this.o = o;
next = null;
prev = null;
System.out.println("First element Node created!");
System.out.println("o= "+o +" next= " + next+" prev= "+ prev);
}
else
throw new IllegalArgumentException("Null element not allowed here!");
}
public Node(Object o, Node next) {
if (o == null)
throw new IllegalArgumentException("Null element not allowed here!");
this.o = o;
if (next != null) {
this.next = next;
this.prev = null;
this.next.setPrev(this);
System.out.println("element Node created!");
System.out.println("o= "+o +" next= " + next+" prev= "+ prev);
}
else
System.out.println("next == null ?!!");
}
public Object getO () { return o; }
public Node getNext(){ return next;}
public Node getPrev(){ return prev;}
public void setO (Object o) { this.o = o;}
public void setNext(Node next) { this.next = next;}
public void setPrev(Node prev) { this.prev = prev;}
...
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ