diff --git a/2.c b/2.c new file mode 100644 index 0000000..67c49c2 --- /dev/null +++ b/2.c @@ -0,0 +1,93 @@ +#include +#include + +typedef struct Student student; +struct Student { + int sid; + struct Student *next; +}; + +void insert(student **head, int idx, uint sid) { + student *new = malloc(sizeof(student)); + new->sid = sid; + + int i = 0; + + student *prev = NULL, *cur = *head; + + for (int i = 0;; i++) { + if (i == idx) { + if (prev != NULL) + prev->next = new; + else + *head = new; + new->next = cur; + return; + } + + if (cur == NULL) + return; + + prev = cur; + cur = cur->next; + } + + printf("Index %d does not exist\n", idx); + return; +} + +void delete (student **head, int idx) { + student *prev = NULL, *cur = *head; + + for (int i = 0; cur != NULL; i++) { + if (i == idx) { + if (prev != NULL) + prev->next = cur->next; + else + *head = cur->next; + free(cur); + return; + } + prev = cur; + cur = cur->next; + } + + printf("Index %d does not exist\n", idx); + return; +} + +void reverse(student **head) { + student *prev = NULL, *cur = *head; + + while (cur->next != NULL) { + student *next = cur->next; + cur->next = prev; + prev = cur; + cur = next; + } + + cur->next = prev; + + *head = cur; + return; +} + +int main() { + student *head = NULL; + insert(&head, 0, 1); + insert(&head, 1, 2002); + insert(&head, 2, -9); + insert(&head, 3, 52); + insert(&head, 1, 4); + delete (&head, 2); + reverse(&head); + + while (head != NULL) { + printf("%d ", head->sid); + head = head->next; + } + + // free + while (head != NULL) + delete(&head, 0); +} diff --git a/4.c b/4.c new file mode 100644 index 0000000..7384b30 --- /dev/null +++ b/4.c @@ -0,0 +1,70 @@ +#include +#include + +typedef struct Node node; +struct Node { + int collegeid; + struct Node *next; +}; + +void insert(node **last, int collegeid) { + node *dst = malloc(sizeof(node)); + dst->collegeid = collegeid; + + if (*last == NULL) + *last = dst; + + if ((*last)->next == NULL) + (*last)->next = dst, dst->next = *last; + else { + dst->next = (*last)->next; + (*last)->next = dst; + } +} + +void delete (node **last) { + node *prev = NULL; + + if ((*last)->next == NULL) + goto cleanup; + + prev = *last; + + while (prev->next != *last) + prev = prev->next; + + if (prev->next->next == prev) + prev->next = NULL; + else + prev->next = (*last)->next; + +cleanup: + free(*last); + *last = prev; +} + +void display(node *last) { + node *cur = last; + while (cur->next != last) { + printf("%d ", cur->next->collegeid); + cur = cur->next; + } + printf("%d\n", last->collegeid); +} + +int main() { + node *last = NULL; + + insert(&last, 1); + insert(&last, 4); + insert(&last, 99); + insert(&last, 1223); + display(last); + + delete (&last); + display(last); + + // free + while (last != NULL) + delete (&last); +}