**Design: OK initial attempt at abstraction** `main()` does not expose `struct q_9` members. **Design: `.tail` is not needed** Present function set has no benefit from the `tail` member. It is removable. Even `delete_last()` walks down the list. **Design: Global variables not needed** This is a major change, so will assume this code is using the simple one linked-list as an exercise. **Design: Consider common naming prefix (and avoid type-defining a pointer)** Example: typedef struct q9 { struct q9 *link; int data; } q9_T; q9_T *q9_newnode(int x); int q9_count(const q9_T *node); void q9_display(const q9_T *node); void q9_add(q9_T *node, int x); void q9_delete_front(q9_T *node); void q9_delete_last(q9_T *node); // new ideas int q9_pop(q9_T *node); int q9_top(const q9_T *node); int q9_end(const q9_T *node); // Potential real use of .tail bool q9_empty(const q9_T *node); **Bug: Wrong allocation size** Code allocates enough for a pointer rather than enough for the `struct`. Cast not needed. Better to allocate to the de-referenced object than type. // node temp=(node)malloc(sizeof(node)); node temp = malloc(sizeof *node); **Function declarations say nothing about signature** `void foo();` allows later calls like `foo(1), foo("hello", 5.0)` to pass undetected as errors. // void delete_front(); // void count(); // void display(); // void delete_last(); void delete_front(void); void count(void); void display(void); void delete_last(void); **Inconsistent spacing** Use an auto-formatter - life is too short for manual formatting. **Lack of error checking** No checking if `scanf("%d",&choice);` succeeded, nor `malloc()`. **Unneeded code** `temp=NULL;` serves nor purpose in `node_add(int x)` **Bug: de-referencing of `NULL`** `delete_front()` does not check if `head == NULL` before `head->link`. `tail` is not updated to `NULL` when last link deleted. **Bug: de-referencing of `NULL`** `delete_last()` does not check if `p->link == NULL` before `p->link->link`. Also expect `head` to be updated to `NULL` if last node deleted. **Prompts use lower case rather than sentence case.** Unless you are [E. E. Cummings](https://en.wikipedia.org/wiki/E._E._Cummings), use sentence case for prompts. // printf("\n please enter a choice:"); printf("\n Please enter a choice:"); **Insure output is seen before input** Due to various buffer modes of `stdout`, best to flush output before input, especially if the prior output does not in with a `'\n'`. printf("\n please enter a choice:"); fflush(stdout); // add scanf("%d",&choice);