Метод копирования в Java - PullRequest
       35

Метод копирования в Java

0 голосов
/ 11 декабря 2019

Я пытаюсь скопировать список в другой список, у меня есть другие методы, такие как удаление, и когда я их тестирую, кажется, что метод копирования редактирует исходный список.

Метод копирования показан ниже.

public ImmutableList<T> copy(ImmutableLinkedList<T> list) {
    Node n = list.head;
    ImmutableLinkedList<T> listcopy = new ImmutableLinkedList<T>();
    listcopy.head = list.head;

   copynode(list.head.next, listcopy.head.next);
   return listcopy;
}

private Node copynode(Node list, Node listcopy){
    if(list == null){
        return listcopy;
    } else{
        listcopy.data = list.data;
        listcopy.next = list.next;
     return copynode(list.next, listcopy.next);
    }
}

Изменен код для этого, но все еще не работает

public void copy(ImmutableListImplement<T> list) {


  ImmutableListImplement<T> listcopy = new ImmutableListImplement<T>();

    this.head = copynode(list.head, listcopy.head);


}

private Node copynode(Node list, Node listcopy){


    if(list == null){
        return listcopy;
    } else{

        listcopy = new Node();
        listcopy.data = list.data;
        listcopy.next = list.next;


        copynode(list.next, listcopy.next);
    }
    return listcopy;
}

1 Ответ

1 голос
/ 11 декабря 2019

listcopy.head является ссылкой на элемент заголовка исходного списка. Это не копия вообще. Затем вы передаете это в метод copynode в качестве параметра listcopy, и copynode путается с записями в нем.

Фактически, list.head.next == listcopy.head.next (как в случае, оба указывают наточно такой же объект Node) в вашем copynode() вызове в строке 6. Вот в чем проблема.

...