Implement removePersonFromList function to delete a person node from the linked list; update documentation in users.h

This commit is contained in:
2025-05-13 10:41:18 +02:00
parent 0a5f176582
commit 6fcbe861ae
3 changed files with 43 additions and 6 deletions
-6
View File
@@ -1,6 +0,0 @@
#ifndef __FILE_OPERATIONS_H__
#define __FILE_OPERATIONS_H__
#endif
+11
View File
@@ -111,5 +111,16 @@ int addPersonToList(node_t **_head, char *_name, char *_surname, uint32_t _depar
*/ */
int addTimeEvent(node_t *_person); int addTimeEvent(node_t *_person);
/**
* @brief Removes a person node from a linked list.
*
* This function removes the node pointed to by _person from the linked list
* whose head is pointed to by _head. Both parameters are double pointers to
* allow modification of the head pointer and the node pointer.
*
* @param _head Double pointer to the head of the linked list.
* @param _person Double pointer to the node representing the person to remove.
* @return int Returns 0 on success, or a negative value on failure.
*/
int removePersonFromList(node_t **_head, node_t **_person); int removePersonFromList(node_t **_head, node_t **_person);
#endif #endif
+32
View File
@@ -159,4 +159,36 @@ int addTimeEvent(
_person->user.last_time_event = current_time; _person->user.last_time_event = current_time;
return 1; return 1;
}
int removePersonFromList(node_t **_head, node_t **_person)
{
if (_head == NULL || *_head == NULL || _person == NULL || *_person == NULL)
return 0;
node_t *current = *_head;
node_t *prev = NULL;
while (current != NULL)
{
if (current == *_person)
{
if (prev == NULL)
{
*_head = current->next;
}
else
{
prev->next = current->next;
}
free(current->user.name);
free(current->user.surname);
free(current);
*_person = NULL;
return 1;
}
prev = current;
current = current->next;
}
return 0;
} }