В настоящее время я выполняю задание для uni, и мне нужно найти сумму графика.Как реализовать функцию «содержит» для связанных списков в C
Для этого я считаю, мне нужен связанный список, который я могу использовать, чтобы помнить, какие узлы были посещены. У меня есть связанный список, который работает правильно, но я не могу заставить функцию contains работать. Это код, который у меня есть:
struct listnode
{
struct N *val;
struct listnode *next;
};
int contains(struct listnode *head,struct N* value)
{
struct listnode *current = head;
while (current)
{
if ((current -> val) == value)
{
return 1;
}
current = current -> next;
}
return 0;
}
примечание: N - это узел графика.
Может ли кто-нибудь увидеть проблемы с тем, что я делаю?
EDIT: содержит функция должна возвращать 1, если N * имеет значение в списке, 0 в противном случае
EDIT2:
У меня есть толчок функции:
void push(struct listnode *head,struct N *value)
{
if (head)
{
struct listnode *current = head;
while (current->next)
{
current = current -> next;
}
current->next = malloc(sizeof(struct listnode*));
current->next->val = value;
current->next->next = NULL;
}
else
{
head = malloc(sizeof(struct listnode*));
if (head)
{
head -> val = value;
head -> next = NULL;
}
else
{
printf("error");
exit(0);
}
}
}
и я хочу следующее линия для возврата 1:
contains(push(visited,p),p);
где p является указателем на структуру N и посещен m у глобального связанный список
EDIT3:
это моя последняя функция суммы, которую я считаю, должен работать, но оленья кожа из-за того, содержит.
long sum(struct N *p)
{
if (p)
{
if (contains(visited,p) == 0) //if p hasnt been visited
{
push(visited,p); //make it visited
return (p -> data) + sum(p -> x) + sum(p -> y) + sum(p -> z);
}
else
{
return 0;
}
}
else
{
return 0;
}
}
* Я не могу получить функцию сложения для работы * - Что вы имеете в виду, не можете заставить ее работать, что она должна делать? Что это на самом деле? –
@FantasticMrFox он должен возвращать 1, когда значение N * находится в списке, и 0 в противном случае – toastedDeli
Вы уверены, что указатели сравнения действительны? Может быть, они разные указатели с одним и тем же содержимым? –