Эти функции
void append(struct node *q, int item);
void add_after(struct node *q, int item, int pos);
void add_beg(struct node *q, int item);
передает указатель на узел по значению.Таким образом, любые изменения указателя внутри функций не влияют на исходный указатель.
Вы должны объявить такие функции, как
void append(struct node **q, int item);
void add_after(struct node **q, int item, int pos);
void add_beg(struct node **q, int item);
Например, для функции append
можно определить следующееway
int append( struct node **head, int item )
{
struct node *new_node = malloc( sizeof( struct node ) );
int success = new_node != NULL;
if ( success )
{
new_node->data = item;
new_node->link = NULL;
while( *head != NULL ) head = &( *head )->link;
*head = new_node'
}
return success;
}
и называется как
struct node *head = NULL;
//...
append( &head,item );
Эти функции
void display(struct node *q)
{
// printf("Hitesh");
//printf("%d",q);
while(q->link!=NULL)
{
printf("%d->",q->data);
q = q->link;
}
}
int count(struct node *q)
{
int c=0;
while(q->link!=NULL)
{
q=q->link;
c++;
}
return c;
}
также недействительны, поскольку нет проверки, равен ли указатель q
NULL
.
Они могут быть определены следующим образом
void display( struct node *head )
{
for ( ; head != NULL; head = head->link )
{
printf( "%d->", head->data );
}
}
size_t count( struct node *head )
{
size_t n = 0;
for ( ; head != NULL; head = head->link )
{
++n;
}
return n;
}