]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/ll.c
working on palllist.c
[16.git] / src / lib / ll.c
diff --git a/src/lib/ll.c b/src/lib/ll.c
new file mode 100755 (executable)
index 0000000..98b1246
--- /dev/null
@@ -0,0 +1,105 @@
+#include "src/lib/ll.h"\r
+\r
+void print_list(node_t * head)\r
+{\r
+       node_t * current = head;\r
+\r
+       while (current != NULL)\r
+       {\r
+               printf("%d\n", current->val);\r
+               current = current->next;\r
+       }\r
+}\r
+\r
+void pushe(node_t * head, int val)\r
+{\r
+       node_t * current = head;\r
+       while (current->next != NULL)\r
+       {\r
+               current = current->next;\r
+       }\r
+\r
+       // now we can add a new variable\r
+       current->next = malloc(sizeof(node_t));\r
+       current->next->val = val;\r
+       current->next->next = NULL;\r
+}\r
+\r
+void pushs(node_t ** head, int val)\r
+{\r
+       node_t * new_node;\r
+       new_node = malloc(sizeof(node_t));\r
+\r
+       new_node->val = val;\r
+       new_node->next = *head;\r
+       *head = new_node;\r
+}\r
+\r
+int pop(node_t ** head)\r
+{\r
+       int retval = -1;\r
+       node_t * next_node = NULL;\r
+\r
+       if (*head == NULL) {\r
+               return -1;\r
+       }\r
+\r
+       next_node = (*head)->next;\r
+       retval = (*head)->val;\r
+       free(*head);\r
+       *head = next_node;\r
+\r
+       return retval;\r
+}\r
+\r
+int remove_last(node_t * head)\r
+{\r
+       int retval = 0;\r
+       node_t * current;\r
+\r
+       /* if there is only one item in the list, remove it */\r
+       if (head->next == NULL) {\r
+               retval = head->val;\r
+               free(head);\r
+               return retval;\r
+       }\r
+\r
+       /* get to the last node in the list */\r
+       current = head;\r
+       while (current->next->next != NULL) {\r
+               current = current->next;\r
+       }\r
+\r
+       /* now current points to the last item of the list, so let's remove current->next */\r
+       retval = current->next->val;\r
+       free(current->next);\r
+       current->next = NULL;\r
+       return retval;\r
+\r
+}\r
+\r
+int remove_by_index(node_t ** head, int n)\r
+{\r
+       int i = 0;\r
+       int retval = -1;\r
+       node_t * current = *head;\r
+       node_t * temp_node = NULL;\r
+\r
+       if (n == 0) {\r
+               return pop(head);\r
+       }\r
+\r
+       for (i = 0; i < n-1; i++) {\r
+               if (current->next == NULL) {\r
+                       return -1;\r
+               }\r
+               current = current->next;\r
+       }\r
+\r
+       temp_node = current->next;\r
+       retval = temp_node->val;\r
+       current->next = temp_node->next;\r
+       free(temp_node);\r
+\r
+       return retval;\r
+}\r