Ознакомьтесь со следующим фрагментом кода. Я пытаюсь вставить элементы в связанный список, используя концепцию двойного указателя.
Проблема заключается в следующем: каждый раз, когда элементу "Голова" присваивается "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=&head;(*lpp)!=NULL;lpp=&(*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.
Назначение "* lpp = head;" неверно, потому что "lpp" имеет значение null, а "* lpp" пытается разыменовать нулевой (или неинициализированный) указатель. Убедитесь, что всякий раз, когда вы разыскиваете указатель, этот указатель не равен нулю.
Узел ** lpp1; Узел * lp1; Узел * newnode; члены не инициализируются. Вам даже не нужны эти члены. Все, что вам нужно в классе List, является указателем на главный узел.