Почему этот обходной список связанного списка работает?Как работают ссылки? - PullRequest
0 голосов
/ 28 марта 2019

В C эта концепция прекрасно проясняется с помощью указателей, но у меня возникают проблемы с пониманием того, что именно здесь происходит в Java.

Может кто-нибудь объяснить мне, как получилось, когда я перебираю список в removeNode (),он ничего не меняет в исходном объекте, НО, когда я делаю front.next = front.next.next, он фактически изменяет объект.Это сводит меня с ума, потому что в C я могу просто использовать указатели для редактирования с желанием.Что именно здесь происходит со ссылками?

Примечание: я знаю, что этот код не обрабатывает крайние случаи.как нулевые узлы и т.д ...

public class LLnode{
    int value;
    LLnode next;

    public LLnode(int x){
        this.value = x;
        this.next = NULL;
    }
}

/*
 * This fn removes the node with the specified value n from the linked list
 */
public void removeNode(LLnode head, int n){
    LLnode front = head;
    while (front.next.value != n){
        front = front.next;  //why DOESN'T this physically change the LL?
    }
    front.next = front.next.next;  //why DOES this physically change the LL ?
}
public static void main(String[] args){
    //node creation
    LLnode a = new LLnode(10);
    LLnode b = new LLnode(20);
    LLnode c = new LLnode(30);
    LLnode d = new LLnode(40);

    //assignments
    c.next = d;
    b.next = c;
    a.next = b;

    removeNode(a,30);

}

Спасибо.

1 Ответ

0 голосов
/ 28 марта 2019

Java - это передача по значению . front = head копирует значение задания из head в front. Из-за этого front = front.next не влияет на head. В цикле front создается только для указания на текущий элемент, он не используется для ведения списка.

Однако front.next = front.next.next изменяет поле next в объекте, на который ссылается front. Здесь нет справочной копии для поля next, как ранее front была копией head.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...