Заголовку присваивается значение Null каждый раз, когда функция insert_node() вызывается в связанном списке

#c #pointers #linked-list

#c #указатели #связанный список

Вопрос:

Пожалуйста, просмотрите следующий фрагмент кода. Я пытаюсь вставить элементы в связанный список, используя концепцию двойного указателя.

Проблема в том, что каждый раз элементу ‘Head’ присваивается значение ‘NULL’, что нежелательно, за исключением первой вставки. пожалуйста, дайте предложения по решению этой проблемы.

 class Node{
      public:
      int item;
      Node *next;
      Node(){};
   };  

   class List{
     public:
     Node *head;
     Node **lpp1;
     Node *lp1;
     Node *newnode;
     List(){head=NULL;};
     void insert_node(Node*,Node**,Node*);
     void delete_node(int,Node*,Node*);
    .
    .
    .
    .   
    .
    };   

  void List::insert_node(Node* newlp,Node **lpp,Node *lp)
     {
       *lpp=head;
       cout<<"n value of the *lpp points to :"<<*lpp;
       cout<<"n Initial Address of the head is:"<<head;`

       if((*lpp)!=NULL)
        {
     for(lpp=amp;head;(*lpp)!=NULL;lpp=amp;(*lpp)->next){
       lp=*lpp;
           if(newlp->item<lp->item){
        newlp->next=lp;
        *lpp=newlp;
        break;
        }
       else{
         lp->next=newlp;
              *lpp=lp;
              break;
        }

        }   

    }

    else{
      head=newnode;
      cout<<"n address of head is  :"<<head;
      cout<<"n "<<head->item<<" is head.";
    }

     }

 int main()
  {
   List l;
   l.insert_node(l.newnode,l.lpp1,l.lp1);
  }
  

результат, который я получаю, :

 1st insertion:

Enter the element to be inserted:34

value of the *lpp points to : 0 
Initial Address of the head is: 0
address of the head is :0x8dd2008
 34 is head.
2nd Insertion:

Enter the element to be inserted:56

value of the *lpp points to : 0 
Initial Address of the head is: 0 
address of the head is :0x8dd2018 
56 is head.
  

Комментарии:

1. может ли кто-нибудь, пожалуйста, помочь мне разобраться в этой проблеме. это было закодировано на C

2. Ваш опубликованный код и выходные данные не совпадают. Трудно понять, в чем может быть проблема.

3. Привет, саху, строки 1st insertion и 2nd insertion в приведенном выше выводе были добавлены только для удобства чтения. Вы можете игнорировать эти строки и рассмотреть оставшиеся выходные данные для лучшего понимания. В основном проблема с элементом ‘head’ заключается в переназначении значения null при каждом вызове функции insert_node() .

4. В вашем опубликованном коде нет ничего, что показывало бы, как вы получаете входные данные.

Ответ №1:

Присвоение «*lpp=head;» неверно, потому что «lpp» равно нулю, а «*lpp» пытается разыменовать нулевой (или неинициализированный) указатель. Убедитесь, что всякий раз, когда вы разыменовываете указатель, этот указатель не равен null .

Узел ** lpp1; Узел * lp1; Узел * newnode; члены не инициализируются. На самом деле вам даже не нужны эти члены. Все, что вам нужно в списке классов, — это указатель на головной узел.

Комментарии:

1. Большое вам спасибо, Олег, за ваш ценный ответ,