// To find elements in list head->6->1->7->12->NULL that are divisible by 3 run like: // ./list_find_divisible 3 6 1 7 12 // 3 #include #include #include struct node { struct node *next; int data; }; // find_divisible should return the number of items in the list // divisible by the given value int find_divisible(int value, struct node *head) { // traverse the linked list int count = 0; struct node *tmp = head; while (tmp != NULL) { if (tmp->data % value == 0) { count++; } tmp = tmp->next; } return count; } //////////////////////////////////////////////////////////////////////// // DO NOT CHANGE THE CODE BELOW // //////////////////////////////////////////////////////////////////////// void print_list(struct node *head); struct node *strings_to_list(int len, char *strings[]); // DO NOT CHANGE THIS MAIN FUNCTION int main(int argc, char *argv[]) { if (argc == 1) { printf("Usage %s value list_data\n", argv[0]); return 0; } // create linked list from command line arguments int value = atoi(argv[1]); struct node *head = strings_to_list(argc - 2, &argv[2]); // If you're getting an error here, // you have returned an uninitialized value printf("%d\n", find_divisible(value, head)); return 0; } // DO NOT CHANGE THIS FUNCTION // create linked list from array of strings struct node *strings_to_list(int len, char *strings[]) { struct node *head = NULL; for (int i = len - 1; i >= 0; i = i - 1) { struct node *n = malloc(sizeof (struct node)); assert(n != NULL); n->next = head; n->data = atoi(strings[i]); head = n; } return head; } // print linked list void print_list(struct node *head) { printf("["); for (struct node *n = head; n != NULL; n = n->next) { // If you're getting an error here, // you have returned an invalid list printf("%d", n->data); if (n->next != NULL) { printf(", "); } } printf("]\n"); }