Я уверен, реализации очереди с помощью связанных списков в C. Вот моя структура -Ошибка реализации очереди с использованием связанного списка в C
typedef struct llist node;
struct llist
{
int data;
node *next;
};
Я перед проблемой при выполнении push()
. Вот мое push()
определение -
void push(node *head,int n)
{
if (head==NULL)
{
head=(node *)(malloc((sizeof(node))));
head->data=n;
head->next=NULL;
printf("=>%d\n",head->data);
}
else
{
node *ptr;
ptr=head;
while(ptr->next!=NULL)
{
ptr=ptr->next;
}
ptr->next=(node *)(malloc((sizeof(node))));
ptr=ptr->next;
ptr->data=n;
ptr->next=NULL;
}
return;
}
и вот моя main()
функция -
int main()
{
int choice,n;
node *head;
head=NULL;
while(1)
{
printf("Enter your choice -\n1. Push\n2. Pop\n3. Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("Enter element to push: ");
scanf("%d",&n);
push(head,n);
if (head==NULL)//To check if head is NULL after returning from push()
{
printf("Caught here!\n");
}
break;
case 2:
pop(head);
break;
case 3:
return 0;
}
}
}
Теперь проблема заключается в том, что после того, как push()
выходов в case 1
, head
снова становится NULL
, т.е. Оказавшись здесь! Заявление выполняется. Как это возможно?
Вы изменяете локальную копию списка в 'push()'. Чтобы изменить значение в 'main()', вам нужен двойной указатель. 'push()' должен быть 'void push (node ** head, int n)', и везде, где вы используете 'head' в' push() 'вместо этого вы должны использовать' * head', и вы должны передать 'push (& head, n) ', когда вы его вызываете. – leif
'head' в функции' main' и 'head' в' pop' - это две разные переменные. – ajay