-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCircularLinkedList.h
184 lines (159 loc) · 3.34 KB
/
CircularLinkedList.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#ifndef _CIRCULAR_LINKEDLIST_H_
#define _CIRCULAR_LINKEDLIST_H_
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct CircularLinkedList {
Node *head;
Node *tail;
int size;
} CircularLinkedList;
/**
* @brief Create a new Circular Linked List object
*
* @return CircularLinkedList*
*/
CircularLinkedList* createNewCircularLinkedList();
/**
* @brief Create a new Node object
*
* @param data
* @return Node*
*/
Node* createNewNode(int data);
/**
* @brief Insert a new node at the end of the list
*
* @param list
* @param data
*/
void insertAtEnd(CircularLinkedList *list, int data);
/**
* @brief Insert a new node at the beginning of the list
*
* @param list
* @param data
*/
void insertAtBeginning(CircularLinkedList *list, int data);
/**
* @brief Insert a new node at the given position
*
* @param list
* @param data
* @param position
*/
void insertAtPosition(CircularLinkedList *list, int data, int position);
/**
* @brief Delete the first node of the list
*
* @param list
*/
void deleteFirstNode(CircularLinkedList *list);
/**
* @brief Delete the last node of the list
*
* @param list
*/
void deleteLastNode(CircularLinkedList *list);
/**
* @brief Delete the node at the given position
*
* @param list
* @param position
*/
void deleteNodeAtPosition(CircularLinkedList *list, int position);
/**
* @brief Search for a node in the list
*
* @param list
* @param data
* @return true
* @return false
*/
bool search(CircularLinkedList *list, int data);
/**
* @brief Print the list
*
* @param list
*/
void printList(CircularLinkedList *list);
/**
* @brief Print the list in reverse order
*
* @param list
*/
void printListReverse(CircularLinkedList *list);
/**
* @brief Reverse the list
*
* @param list
*/
void reverseList(CircularLinkedList *list);
/**
* @brief Reverse the list recursively
*
* @param node
*/
void reverseListRecursive(CircularLinkedList *list);
void reverseListRecursiveHelper(Node *node);
/**
* @brief Delete the list
*
* @param list
*/
void deleteList(CircularLinkedList *list);
/**
* @brief Find the middle node of the list
*
* @param list
* @return Node*
*/
Node* findMiddleNode(CircularLinkedList *list);
/**
* @brief Find the maximum node of the list
*
* @param list
* @return Node*
*/
Node* findMaximumNode(CircularLinkedList *list);
/**
* @brief Find the minimum node of the list
*
* @param list
* @return Node*
*/
Node* findMinimumNode(CircularLinkedList *list);
/**
* @brief Merge two linked-lists
*
* @param list1
* @param list2
* @return CircularLinkedList
*
*/
CircularLinkedList* mergeTwoLists(CircularLinkedList *list1, CircularLinkedList *list2);
/**
* @brief Sort the linked list
*
* @param list
*/
void sortLinkedList(CircularLinkedList *list);
/**
* @brief Merge two sorted lists
*
* @param list1
* @param list2
* @return CircularLinkedList*
*/
CircularLinkedList* mergeTwoSortedLists(CircularLinkedList *list1, CircularLinkedList *list2);
/**
* @brief Free the list
*
* @param list
*/
void freeList(CircularLinkedList *list);
#endif