Путаница с указателями в проблеме, связанной со связанным списком - PullRequest
0 голосов
/ 28 января 2020

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

#include <iostream>

class Node{
  public:
  int data;
  Node *next;

};

class LinkedList{
  private:
  Node *head;
    public:
    LinkedList(){
      head=NULL; //at start ll is empty
    }




  void add(int d){
     Node *node=new Node();

    node->data=d;
    node->next=NULL;

    if(head==NULL){
      head=node;  
    }else{

           Node *lastnode=head;
            for(;lastnode->next!=NULL;lastnode=lastnode->next){

            }

            lastnode->next=node;
          }

  }

В строке Node *lastnode=head; почему lastnode указывает на адрес головы? Разве это не должно быть так:

Node *lastnode;
lastnode=head;

Я полностью смущен этим. Может кто-нибудь объяснить мне функцию добавления по отношению к указателям

1 Ответ

0 голосов
/ 28 января 2020

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

Node *lastnode=head;
for(;lastnode->next!=NULL;lastnode=lastnode->next){
}
lastnode->next=node;

Этот код захватывает головной узел через lastnode = head. Затем он переходит список и читает конец. Он проверяет завершение, проверяя, lastnode -> next равно нулю. Он перемещается к следующему узлу через lastnode = lastnode -> next.

Поскольку ваша функция add, кажется, добавляется, и у вас нет хвостового указателя, она должна обходить весь список каждый раз.

PS: обратите внимание на то, как вы форматируете код. Если вы не можете отформатировать его правильно, нет смысла тратить время на это поле.

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