как работает указатель в односвязном списке? - PullRequest
0 голосов
/ 06 октября 2018

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

p.next = new Node<>(a[i], null);
p = p.next;

, почему мы вызываем next по p и создаем новый узел, а затем присваиваем null следующему одновременно через параметр.?затем давая значение p из p.next, который должен быть нулевым?я попытался распечатать p.next и next, чтобы увидеть, совпадают ли они или есть разница, и я получил в консоли адрес для p.next и ноль для следующего.чем они отличаются друг от друга?Мне нужно некоторое объяснение в этой части кода и как создается узел и указатель.

public class EnkeltLenketListe<T> implements Liste<T> {
private static final class Node<T>
{
    private T value;
    private Node<T> next;

    private Node(T value, Node<T> next)
    {
        this.next = next;
        this.value = value;
    }
}

private Node<T> head, tail;
private int counter;

public EnkeltLenketListe(T[] a)
{
    this();

    int i = 0; for (; i < a.length && a[i] == null; i++);

    if (i < a.length)
    {
        head = new Node<>(a[i], null);
        Node<T> p = head;
        counter = 1;

        for (i++; i < a.length; i++)
        {
            if (a[i] != null)
            {
                p.next = new Node<>(a[i], null);
                p = p.next;
                counter++;
            }
        }
        tail = p;
    }
}

1 Ответ

0 голосов
/ 06 октября 2018

Здесь нужно подумать о двух указателях.Указатель p подключается к текущему узлу, который является последним узлом в списке.p.next указывает на то, что будет следующим узлом, если будет добавлен новый узел.

p.next = new Node<>(a[i], null);

Эта строка создает новый узел в следующем месте (вы добавляете узел в конецlist).

p = p.next;

Эта строка указывает текущему указателю p указать на вновь созданный узел в конце списка (он не нулевой, вы только что создали новый узел).

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