Try โ€‚โ€‰HackMD

2020q3 Homework (quiz1)

contributed by < chewei3 >

add_entry

void add_entry(node_t **head, int new_value) { node_t **indirect = head; node_t *new_node = malloc(sizeof(node_t)); new_node->value = new_value; new_node->next = NULL; AA1; while (*indirect) indirect = &(*indirect)->next; AA2; }

AA1

assert(new_node);

AA2

*indirect = new_node;

swap_pair

node_t *swap_pair(node_t *head) { for (node_t **node = &head; *node && (*node)->next; BB1) { node_t *tmp = *node; BB2; tmp->next = (*node)->next; (*node)->next = tmp; } return head; }

BB1

node = &(*node)->next->next

BB2

*node = (*node)->next;

swap_pair ็š„ pointer to pointer ็‰ˆ

void swap_pair(node_t **head) { for (; *head && (*head)->next; head = &(*head)->next->next) { node_t *tmp = *head; *head = (*head)->next; tmp->next = (*head)->next; (*head)->next = tmp; } }

reverse

node_t *reverse(node_t *head) { node_t *cursor = NULL; while (head) { node_t *next = head->next; CCC; head = next; } return cursor; }

CCC

head->next = cursor; cursor = head;

reverse ็š„ pointer to pointer ็‰ˆๆœฌ

void reverse(node_t **head) { node_t *cursor = NULL; while (*head) { node_t *next = (*head)->next; (*head)->next = cursor; cursor = *head; *head = next; } *head = cursor; }

recursive reverse

void rev_recursive(node_t **head, node_t *cur) { if (!cur) return; if (!cur->next) { *head = cur; return; } rev_recursive(head, cur->next); cur->next->next = cur; cur->next = NULL; }