Я пытался написать функцию, которая удаляет узел из связанного списка, хотя у меня были проблемы.Пытается написать функцию, которая удаляет узел
Вот мой алгоритм:
- Получить имя узла, который я хочу, чтобы удалить (каждый узел имеет 3 детали в нем: имя/возраст/пол)
- Тогда я найти свое место в списке
- , а затем я прохожу вперед
Например
Друг -> следующая = друга -> далее -> следующий ..
Хотя мне нужно найти первый узел в связанном списке, и я не знаю, как добраться до него. Это то, что я написал:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
typedef struct friend
{
char *name;
int age;
char gender;
struct friend* next;
}friend;
void node_delete(friend* delete)
{
friend* temp = malloc(sizeof(friend));
char name[256];
int i = 0, j =0; // Not being used, though I'd use it
printf ("Please enter the friend's name you want to delete: \n");
fgets (name, 256, stdin); // Getting the name of the person the user wants to delete
fgets (name, 256, stdin);
while (0 == (strcmp(temp -> next -> name, delete -> next -> name))) // As long as the
// name doesnt match, it'll go to the next name in the linked list
{
temp = friend -> next; // Going to the next name in the linked list
}
temp -> next = temp -> next -> next; // Replacing the node with the node after it..
// for ex. if I have 1 -> 2 -> 3, it'll be 1 -> 3
free (delete);
}
Цикл while останавливается, как только имя не совпадает; вы переписываете первые данные, которые вы читаете в 'name'; вы никогда не помещаете данные в «temp», просто предоставляя ему блок памяти; 'i' и' j' не используются. (Постарайтесь прочесть и объяснить * точно, что каждая строка этого кода делает для себя, что может немного помочь :)) – huon
Почему вы пытаетесь получить имя дважды? – RedX
Я изменил цикл на 0! =, Так что это сработает; также, я не уверен, как положить что-то в него, это был вопрос ... @Redx - У меня есть ошибка, которую я должен написать дважды, чтобы заставить ее работать. Это не проблема, так что забудьте об этом ... Редактировать: я буду добавлять заметки сразу. –