list.c 1001 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. if (!(newnode)) return ENOMEM;#include <lib.h>
  2. #include <list.h>
  3. #include <kern/errno.h>
  4. list * newlist()
  5. {
  6. list * ret = kmalloc(sizeof(list));
  7. if (!(ret)) return ENOMEM;
  8. ret->front = NULL;
  9. ret->len = 0;
  10. return ret;
  11. }
  12. void listsert(list * l, int x)
  13. {
  14. node * temp = l->front;
  15. node * newnode = kmalloc(sizeof(node));
  16. if (!(newnode)) return ENOMEM;
  17. newnode->val = x;
  18. newnode->next = temp;
  19. l->front = newnode;
  20. ++l->len;
  21. }
  22. void listemove(list * l, int x)
  23. {
  24. node * temp = l->front;
  25. node * temp2 == NULL;
  26. while (temp)
  27. {
  28. if (temp->val == x)
  29. {
  30. if (!(temp2))
  31. {
  32. l->front = temp->next;
  33. }
  34. else
  35. {
  36. temp2->next = temp->next;
  37. }
  38. --l->len;
  39. break;
  40. }
  41. else
  42. {
  43. temp2 = temp;
  44. temp = temp->next;
  45. }
  46. }
  47. }
  48. void listelete(list * l)
  49. {
  50. node * temp = l->front;
  51. node * temp2 = NULL;
  52. while (temp)
  53. {
  54. temp2 = temp->next;
  55. kfree(temp);
  56. temp = temp2;
  57. }
  58. kfree(l);
  59. }