Program quits completely at
while ((temp->x < new_node->x)&&(temp != NULL)) 
but it runs when written as
while((temp!=NULL) &&(temp->x < new_node->x)) 
Here is my code.
Node *insert(Node *head)
{
    Node *new_node = (Node *)malloc(sizeof(Node));
    new_node->next = NULL;
    printf("\nEnter x: ");
    scanf("%d", &new_node->x);
    if (head == NULL)
        return new_node;
    else
    {
        Node *prev = NULL, *temp = head;
        while ((temp->x < new_node->x)&&(temp != NULL))  // but, ((temp!=NULL) &&(temp->x < new_node->x)) runs 
        {
            prev = temp;
            temp = temp->next;
        }
        new_node->next = temp;
        if (prev == NULL) // Node needs to insert at beginning to maintain the sorting of Linked List
            return new_node;
        prev->next = new_node;
        return head;
    }
}
 
     
    