I have written this code in c to implement linked list. while the semantic and syntax are fine, it does not work as it should. For example, when I insert 1 into the list and then print the linked list, it shows that the list is empty.
#include<stdio.h>
#include<stdlib.h>
struct node {
    int info;
    struct node *next;
}; typedef struct node Node;
void addNode(Node *head, int x)
{
        Node *temp;
        temp=malloc(sizeof(temp));
        temp->info=x;
        if (head==NULL)//if this is the first node in the list
        {
            head=temp;
            temp->next=NULL;
        }
        else //if not, add it as the head
        {
            temp->next=head;
            head=temp;
        }
}
void appendNode(Node *head, int x)
{
    Node *rear =head;
    Node *temp= malloc(sizeof(temp));
    temp->info=x;
    temp->next=NULL;
    while (rear->next!=NULL)
        rear=rear->next;
    rear->next=temp;
    rear=temp;
}
void insertNodeafter(Node *head, int location, int x)
{
    int i;
    Node *before, *after = head;
    Node *temp= malloc(sizeof(temp));
    temp->info=x;
    for (i=0;i<location;i++)
        before=before->next;
    after=before->next;
    temp->next=after;
    before->next=temp;
}
void insert(Node *head, int x)
{
    int c=0;
    Node *temp;
    temp=head;
    if(temp==NULL)
    {
    addNode(temp,x);
    }
    else
    {
    while(temp!=NULL)
    {
        if(temp->info<x)
        c++;
        temp=temp->next;
    }
    if(c==0)
        addNode(temp,x);
    else if(c<listSize())
        insertNodeafter(temp,x,++c);
    else
        appendNode(temp,x);
    }
}
int listSize()
{
    Node *head, *n;
    int c=0;
    n=head;
    while(n!=NULL)
    {
    n=n->next;
    c++;
    }
    return c;
}
void DisplayLinkedList(Node* head)
{
    Node *rear=NULL;
    if (head==NULL)
        printf("list is empty!\n");
    else
    {
        rear=head;
        while (rear!=NULL)
            printf("%d |---> ", rear->info);
            rear=rear->next;
    }
}
int getNextNode(Node *head)
{
    if (head == NULL)
        return -1;
    else
        return head->next->info;
}
Node* deleteNode(Node *head, int x)
{
    Node *temp;
    if (head == NULL)
        return NULL;
    else
        {
            if (head->info==x)
                {
                temp = head->next;
                free(head);
                head=temp;
                return head;
                }
            else
                {
                deleteNode(head->next,x);
                return head;
                }
        }
}
void main()
{
    int i=0;
    Node *myNode;
    insert(myNode,1);
    DisplayLinkedList(myNode); 
}
 
     
     
     
    