diff --git a/ex2/main.c b/ex2/main.c
index 6550e291ef06e7676d8dfb2bf08dd772777aedc7..de9e707332b614d0c9e1420233b23010828572f9 100644
--- a/ex2/main.c
+++ b/ex2/main.c
@@ -1,7 +1,71 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+typedef struct _element {
+   int data;
+   struct _element *next;
+} element;
+
+void cl_push(element* current, element* new_elem, int data){
+	new_elem->data = data;
+	new_elem->next = NULL;
+	current->next = new_elem;	
+}
+
+void cl_insert_at(element* head, element* new_elem, int val, uint index){
+	element* current = head;
+
+
+	for (uint i = 0; i < index; i++)
+	{
+		element* next = current->next;
+		if (next == NULL){
+			return;
+		}
+		current = next;
+	}
+
+	element* next = current->next;
+	current->next = new_elem;
+	new_elem->next = next;
+	new_elem->data = val;
+}
+
+void cl_remove_at(element* head, uint index){
+	element* current = head;
+	for (uint i = 0; i < index; i++)
+	{
+		element* next = current->next;
+		if (next == NULL){
+			return;
+		}
+		current = next;
+	}
+	element* next = current->next;
+	element* n_next = next->next;
+	current->data = next->data;
+	current->next = n_next;
+}
+
 int main(){
+	element first_elem = {.data = 8, .next = NULL};
+	element* head = &first_elem;
+	element second;
+	element third;
+	element fourth;
+	cl_push(&first_elem, &second, -1);
+	cl_push(&second, &third, 15);
+	cl_push(&third, &fourth, 12);
+	element newOne;
+	cl_insert_at(head, &newOne, 99, 1);
+
+	cl_remove_at(head, 2);
+
+	element* index = head;
+	while (index != NULL){
+		printf("Data: %d\n", index->data);
+		index = index->next;
+	}
 
 	return 0;
 }
\ No newline at end of file