Я не знаю, почему head = head->next
работает, когда мы ничего не сохранили, или NULL
в head->next
это две функции 1-я функция принимает аргумент n
типа int
и создает список, в этой функции мы определяем, что head->next = NULL
, а вторая функция, т.е. deletefirstnode
, удаляет первый узел, но в этой функции head->next
действительно работает и указывает на другой узел в списке, который мы используем temp->next
для доступа к следующему узлу, но почему в этом случае head->next
пожалуйста, объясните мне это
void createlist(int n){
struct node *newnode, *temp;
int data, i;
head = (struct node*)malloc(sizeof(struct node));
if(head == NULL){
printf("unable to allocate memory");
}
else{
printf("enter the data of node 1 : ");
scanf("%d", &data);
head->data = data;
head->next = NULL;// here is where we define head->next to NULL
temp = head;
for(i=2; i<=n; i++){
newnode = (struct node*)malloc(sizeof(struct node));
if(newnode == NULL){
printf("unble to allocate memory");
}
else{
printf("enter the data of node %d", i);
scanf("%d", &data);
newnode->data = data;
newnode->next = NULL;
temp->next = newnode;
temp = temp->next;
}
}
printf("singly linked list created successfully\n");
}
}
void deletefirstnode(){
struct node *todelete;
if(head == NULL){
printf("list is already empty");
}
else{
todelete = head;
head = head->next;//and why this works now I am confused
printf("\ndata deleted = %d\n", todelete->data);
free(todelete);
printf("successfully deleted the first node from list\n");
}
}