Конструктор глубокого копирования для связанного списка в JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Конструктор глубокого копирования для связанного списка в Java

Сообщение Anonymous »

У меня есть аппаратное задание, и только одна небольшая часть его — создать конструктор копирования, который создает глубокую копию связанного списка, который вы ввели в его параметры.

Я понимаю, что это означает, что введенный вами список остается неизменным и что новый связанный список изолирован от «старого». Мой код дает мне новый список, который точно такой же, как старый (тот, который вы вводите в качестве параметра), и это то, что я хочу, но старый изменен.

Вот конструктор:

Код: Выделить всё

public SortedLinkedSet(SortedLinkedSet copy) {
if (copy == null) {
this.firstNode = null;
} else{
SortedLinkedSetNode firstNode1 = new SortedLinkedSetNode(copy.getFirstNode().value);
this.firstNode = firstNode1;
// so basically I am chaining elements from "copy" to firstNode1 and then making "this" = to firstNode1.
while (copy.firstNode.next !=null) {
firstNode1.add(copy.getFirstNode().next.value);
this.firstNode = firstNode1;
copy.firstNode = copy.firstNode.next;
// at the end of this loop I have a successful new linkedList with the same value, but "copy" has been changed
}
}
}
Если, например, я ввожу связанный список со значениями (1,2,3) - с помощью этого конструктора я получаю новый связанный список со значениями 1,2,3, но у старого есть только 1.. Если кто-то может помочь мне понять, почему это идет не так, было бы здорово. Спасибо

ОБНОВЛЕНИЕ: Как указал Иридер и проведя тест, я почти уверен, что проблема в операторе:
copy.firstNode = copy.firstNode.next;
Я удалил текущий код и выполнил следующую проверку:

Код: Выделить всё

SortedLinkedSetNode firstNode = new SortedLinkedSetNode(copy.getFirstNode().value);
this.firstNode=firstNode;

firstNode.add(copy.getFirstNode().next.value);
this.firstNode = firstNode;

firstNode.add(copy.getFirstNode().next.next.value);
this.firstNode = firstNode;
и это работает отлично (но я заранее знал, что тестирую только список из трех элементов). Как бы я сделал это с помощью цикла while без использования такого оператора as :
copy.firstNode = copy.firstNode.next;
Мне нужно как-то перемещаться по списку «копий»?

Подробнее здесь: https://stackoverflow.com/questions/221 ... st-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»