1
1
mirror of https://github.com/theoludwig/libcproject.git synced 2024-12-11 21:13:00 +01:00
libcproject/lib/linked_list.h

91 lines
1.7 KiB
C
Raw Normal View History

#ifndef __LIBCPROJECT_LINKED_LIST__
#define __LIBCPROJECT_LINKED_LIST__
2023-01-05 19:28:05 +01:00
#include <errno.h>
2023-01-07 19:38:01 +01:00
#include <stdbool.h>
2023-01-05 19:28:05 +01:00
#include <stdlib.h>
2023-01-07 19:38:01 +01:00
#include "stack.h"
2023-06-25 15:07:34 +02:00
#include "types.h"
2023-01-07 19:38:01 +01:00
/**
* @brief Linked list data structure.
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
struct linked_list {
struct linked_list_node *head;
size_t length;
};
/**
* @brief Linked list node data structure.
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
struct linked_list_node {
void *data;
struct linked_list_node *next;
};
/**
* @brief Linked list initialization.
2023-08-09 21:08:15 +02:00
*
* @return struct linked_list*
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
struct linked_list *linked_list_initialization();
/**
* @brief Add a new node in the head of the linked list.
2023-08-09 21:08:15 +02:00
*
* @param list
* @param new_value
* @return struct linked_list_node*
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
struct linked_list_node *linked_list_add_in_head(struct linked_list *list, void *new_value);
/**
* @brief Delete node in the head of the linked list.
2023-08-09 21:08:15 +02:00
*
* @param list
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
void linked_list_delete_in_head(struct linked_list *list);
/**
* @brief Add a new node in the tail of the linked list.
2023-08-09 21:08:15 +02:00
*
* @param list
* @param new_data
* @return struct linked_list_node*
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
struct linked_list_node *linked_list_add_after_last(struct linked_list *list, void *new_data);
/**
* @brief Reverse the linked list by creating a new one.
2023-08-09 21:08:15 +02:00
*
* @param list
* @return struct linked_list*
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
struct linked_list *linked_list_reverse(struct linked_list *list);
/**
* @brief Reverse the linked list by mutating it.
2023-08-09 21:08:15 +02:00
*
* @param list
* @since v1.0.0
*/
2023-01-05 19:28:05 +01:00
void linked_list_reverse_mutate(struct linked_list *list);
2023-08-03 19:48:02 +02:00
/**
2023-08-03 22:57:32 +02:00
* @brief Frees the linked list.
2023-08-09 21:08:15 +02:00
*
* @param list
2023-08-05 15:03:53 +02:00
* @since v3.0.0
2023-08-03 19:48:02 +02:00
*/
void linked_list_free(struct linked_list *list);
2023-01-05 19:28:05 +01:00
#endif