#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. Большое вам спасибо, Олег, за ваш ценный ответ,