Linked list c program


#include <stdio.h>
#include <stdlib.h>
struct NODE {
    int number;
    struct NODE *next;
};
int search_value(struct NODE *llist, int num);
void append_node(struct NODE *llist, int num);
void display_list(struct NODE *llist);
void delete_node(struct NODE *llist, int num);
int main()
{
    int num = 0;
    int input = 1;
    int retval = 0;
    struct NODE *llist;
    llist = (struct NODE *) malloc(sizeof(struct NODE));
    llist->number = 0;
    llist->next = NULL;
    while (input != 0)
    {
        printf("\n-- Menu Selection --\n");
        printf("0) Quit\n");
        printf("1) Insert\n");
        printf("2) Delete\n");
        printf("3) Search\n");
        printf("4) Display\n");
        scanf("%d", &input);
        switch (input)
        {
            case 0:
            default:
                printf("Goodbye ...\n");
                input = 0;
                break;
            case 1:
                printf("Your choice: `Insertion'\n");
                printf("Enter the value which should be inserted: ");
                scanf("%d", &num);
                append_node(llist, num);
                break;
            case 2:
                printf("Your choice: `Deletion'\n");
                printf("Enter the value which should be deleted: ");
                scanf("%d", &num);
                delete_node(llist, num);
                break;
            case 3:
                printf("Your choice: `Search'\n");
                printf("Enter the value you want to find: ");
                scanf("%d", &num);
                if ((retval = search_value(llist, num)) == -1)
                    printf("Value `%d' not found\n", num);
                else
                    printf("Value `%d' located at position `%d'\n", num, retval);
                break;
            case 4:
                printf("You choice: `Display'\n");
                display_list(llist);
                break;
        } /* switch */
    } /* while */
    free(llist);
    return (0);
}
void display_list(struct NODE *llist)
{
    while (llist->next != NULL)
    {
        printf("%d ", llist->number);
        llist = llist->next;
    }
    printf("%d", llist->number);
}
void append_node(struct NODE *llist, int num)
{
    while (llist->next != NULL)
        llist = llist->next;
    llist->next = (struct NODE *) malloc(sizeof(struct NODE));
    llist->next->number = num;
    llist->next->next = NULL;
}
void delete_node(struct NODE *llist, int num)
{
    struct NODE *temp;
    temp = (struct NODE *) malloc(sizeof(struct NODE));
    if (llist->number == num)
    {
        /* remove the node */
        temp = llist->next;
        free(llist);
        llist = temp;
    } else
    {
        while (llist->next->number != num)
            llist = llist->next;
        temp = llist->next->next;
        free(llist->next);
        llist->next = temp;
    }
}
int search_value(struct NODE *llist, int num)
{
    int retval = -1;
    int i = 1;
    while (llist->next != NULL)
    {
        if (llist->next->number == num)
            return i;
        else
            i++;
        llist = llist->next;
    }
    return retval;
}


Output : 

-- Menu Selection --
0) Quit
1) Insert
2) Delete
3) Search
4) Display

Enter your option : 1
Your choice: `Insertion'
Enter the value which should be inserted: 34

Enter your option : 4
You choice: `Display'
0 34
Enter your option : 1
Your choice: `Insertion'
Enter the value which should be inserted: 60

Enter your option : 3
Your choice: `Search'
Enter the value you want to find: 60
Value `60' located at position `2'

Enter your option : 0
Goodbye ...

0 Comments