-
Notifications
You must be signed in to change notification settings - Fork 0
/
linkedlist.h
103 lines (89 loc) · 2.57 KB
/
linkedlist.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
* @file linkedlist.h
* @brief Generic doubly-linked list with insertion at beginning and removal.
*
* TODO
*
* @author D. Trinchero ([email protected])
* @date 2019-09-19
*/
#ifndef LINKEDLIST_H
#define INKEDLIST_H
#include <stdlib.h>
/** the container structure for a linked list node */
typedef struct listnode ListNode;
/** a linked list node container */
struct listnode {
void *data;
ListNode *next;
ListNode *prev;
};
/** the container structure for a linked list */
typedef struct linkedlist LinkedList;
/** a linked list container */
struct linkedlist {
ListNode *head;
};
/**
* Creates and returns a new (empty) list.
*
* @return a pointer to the new list which was created
*/
LinkedList *lst_new_list(void);
/**
* Creates and returns a new list node with the given data.
*
* @param[in] data
* a pointer to the data which the new node is to contain
* @return a pointer to the new node which was created
*/
ListNode *lst_new_node(void *data);
/**
* Links the given node at the beginning of the given list.
*
* @param[in] list
* a pointer to the list to which to append the node
* @param[in] node
* a pointer to the node which is to be appended
*/
void lst_link(LinkedList *list, ListNode *node);
/**
* Unlinks and returns the given node from the given list and returns it.
*
* @param[in] list
* a pointer to the list from which to remove the node
* @param[in] node
* a pointer to the node which is to be removed
* @return a pointer to the unlinked node
*/
ListNode *lst_unlink(LinkedList *list, ListNode *node);
/**
* Moves the given node from one list to another.
*
* @param[in] old_lst
* a pointer to the list from which to remove the node
* @param[in] new_lst
* a pointer to the list to which to add the node
* @param[in] node
* a pointer to the node which is to be moved
*/
void lst_move(LinkedList *old_lst, LinkedList *new_lst, ListNode *node);
/**
* Frees all of the nodes in the linked list, along with the data they store.
*
* @param[in] list
* a pointer to the list which is to be freed
* @param[in] free_data
* a pointer to a function which dellocates the node data
*/
void lst_free_list(LinkedList *list, void (*free_data)(void *k));
/**
* Frees a single list node, along with the data it stores.
*
* @param[in] node
* a pointer to the node which is to be freed
* @param[in] free_data
* a pointer to a function which dellocates the node data
*/
void lst_free_node(ListNode *node, void (*free_data)(void *k));
#endif