ragazzi ho un problema con l'algoritmo list_ordered_insert, al momento che mi chiede di inserire un elemento nella lista ordinata, il programma smette di funzionare ed esce dall'eseguibile, qual'è il problema? proprio non capisco.

codice:
#include<iostream>
using namespace std;

typedef struct nodo
{int info;
 nodo *link;
}list;

void create(list *&head,list *&prev,int elem);
void stampa(list *head);
void insert(list *&head,list *&prev,int elem);

int main()
{
list *head=NULL,*prev=NULL;
int elem;
char scelta;
do
     {cout<<"\n  Inserisci elemento in lista ";
      cin>>elem;
      create(head,prev,elem);
      cout<<"\n Vuoi inserire un altro elemento ? (Y/N) ";
      cin>>scelta;
     }
while((scelta=='y')||(scelta=='Y'));
  cout<<"\n  La lista da te inserita è : ";
  stampa(head);
  system("PAUSE");

     cout<<"\n Inserisci un elemento nella lista ordinata ";
     cin>>elem;
     prev=head;
     insert(head,prev,elem);
     cout<<"\n  La lista modificata è : ";
     stampa(head);
     system("PAUSE");
       
 return 0;
} 
 
 
 void create(list *&head,list *&prev,int elem)
      {list *new_node;
       new_node=new list;
       new_node->info=elem;
       new_node->link=NULL;
       if(head==NULL)
            {head=new_node;
             prev=head;}
       else
            {prev->link=new_node;
             prev=new_node;
             }
      }           
 
 void stampa(list *head)
     {while(head!=NULL)
       {cout<<head->info;
        cout<<" ";
        head=head->link;
       }
       }

 void insert(list *&head,list *&prev,int elem)
      { list *temp,*new_node;
        temp=prev->link;
        new_node=new list;
        new_node->info=elem;
        new_node->link=NULL;
        if(temp=NULL)
             prev->link=new_node;
              
        else
             {if(elem<head->info)
                  {new_node->link=head;
                   head=new_node;
                   }
              else 
                  {if(elem<temp->info)
                        {new_node->link=temp;
                         prev->link=new_node;
                         }
                         else 
                             insert(head,temp,elem);
 
               }    
            }                      
 return; }