list.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "list.h"
  2. ListNode* list_init_head(void* data) {
  3. ListNode* new = (ListNode*)malloc(sizeof(ListNode));
  4. new->data = data;
  5. new->next = NULL;
  6. return new;
  7. }
  8. ListNode* list_add(ListNode* head, void* data) {
  9. ListNode* new = (ListNode*)malloc(sizeof(ListNode));
  10. new->data = data;
  11. new->next = NULL;
  12. if(head == NULL)
  13. head = new;
  14. else {
  15. ListNode* it;
  16. for(it = head; it->next != NULL; it = it->next)
  17. ;
  18. it->next = new;
  19. }
  20. return head;
  21. }
  22. ListNode* list_find(ListNode* head, void* data) {
  23. ListNode* it;
  24. for(it = head; it != NULL; it = it->next)
  25. if(it->data == data) break;
  26. return it;
  27. }
  28. ListNode* list_element_at(ListNode* head, uint16_t index) {
  29. ListNode* it;
  30. uint16_t i;
  31. for(it = head, i = 0; it != NULL && i < index; it = it->next, i++)
  32. ;
  33. return it;
  34. }
  35. ListNode* list_remove(ListNode* head, ListNode* ep) {
  36. if (head == NULL) {
  37. return NULL;
  38. }
  39. if(head == ep) {
  40. ListNode* new_head = head->next;
  41. free(head);
  42. return new_head;
  43. }
  44. ListNode* it;
  45. for(it = head; it->next != ep; it = it->next)
  46. ;
  47. it->next = ep->next;
  48. free(ep);
  49. return head;
  50. }
  51. void list_free(ListNode* head) {
  52. ListNode *it = head, *tmp;
  53. while(it != NULL) {
  54. tmp = it;
  55. it = it->next;
  56. free(tmp);
  57. }
  58. }