Я добавил оператор печати в цикл if else функции inserttatend и inertatfront, это привело к тому, что оператор printf печатался каждый раз, когда я вызывал обе функции из main ..., но при отображении он отображает не все значения. Я думаю, что, возможно, узлы где-то ломаются во время вызова ... Смотрите вывод ниже кода. Он показывает только три значения, в то время как он должен отображать все значения, которые я ввел в main ().
Вот мой код ..
#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
struct node* ptr;
};
struct node* insertatend(struct node* h, int value)
{
struct node* newnode;
newnode = (struct node*)malloc(sizeof(struct node));
newnode->value = value;
newnode->ptr = NULL;
if (h == NULL)
return newnode;
else {
while(h->ptr!=NULL)
h=h->ptr;
h->ptr = newnode;
return h;
}
}
struct node* insertatfront(struct node* h, int value)
{
struct node* newnode;
newnode = (struct node*)malloc(sizeof(struct node));
if (h == NULL) {
newnode->value = value;
newnode->ptr = NULL;
return newnode;
}
else
{
newnode->value = value;
newnode->ptr = h;
return newnode;
}
}
void display(struct node* h)
{
while ((h->ptr) != NULL)
{
printf("The value stored in the block is %d\n", h->value);
h = h->ptr;
}
if (h->ptr == NULL)
printf("The value stored in the block is %d\n", h->value);
}
void main()
{
struct node* head;
head = (struct node*)malloc(sizeof(struct node));
head = insertatend(head, 90);
head = insertatend(head, 30);
head = insertatfront(head, 5);
head = insertatend(head, 12);
head = insertatend(head, 1);
head = insertatfront(head, 25);
display(head);
}
/* Output:The value stored in block is 25
* The value stored in block is 5
* The value stored in block is 1
*/