高手们帮小弟看一下小弟写的关于用链表实现集合的合.并.差出现错误

高手们帮小弟看一下小弟写的关于用链表实现集合的合.并.差出现异常,在线等
C/C++ code

#include <iostream.h>
#include <stdlib.h>
typedef struct List//节点的定义
{
    int data;
    struct List *next;
}List,* Link;
void CreateList(Link head)//创建链表
{
    head=(Link)malloc(sizeof(List));
    head->next=NULL;
    while (1)
    {
        Link pointor=(Link)malloc(sizeof(List));
        cin>>pointor->data;
        if(!cin)//判断是否为字符
         {
           cin.clear();
           cin.get();
           continue;
         } 
        else
        {
            break;
        }
        pointor->next=head->next;
        head->next=pointor;
    }
}
void PrintList(Link head)
{
    Link newhead=head->next;
    do
    {
       cout<<newhead->data<<" ";
       newhead=newhead->next;
    }while (newhead->next!=NULL); 
}
void SetIntersection(Link head1,Link head2)//集合的交集
{
   for(Link p=head1->next;p!=NULL;p=p->next)
   for(Link q=head2->next;q!=NULL;q=q->next)
   {
       if (p->data==q->data)
       {
           cout<<p->data<<" ";
       }
   }
   cout<<endl;
}
void SetAltogeter(Link head1,Link head2)//集合并集
{
    for (Link p=head1->next;p!=NULL;p=p->next)
    {
        for (Link q=head2->next;q!=NULL;q=q->next)
        {
            if(p->data!=q->data)
            {
             cout<<p->next<<" ";    
            }
        }
    }
           PrintList(head2);
           cout<<endl;
}
void SetMission(Link head1,Link head2)//集合的差
{
    cout<<"Head1-Head2:"<<endl;
    for (Link p=head1->next;p!=NULL;p=p->next)
    {
        for (Link q=head2->next;q!=NULL;q=q->next)
        {
            if (p->data!=q->data)
            {
                cout<<p->data<<" ";
            }
        }
    }
    cout<<endl;
    cout<<"Head2-Head1"<<endl;
    for (Link m=head2->next;m!=NULL;m=m->next)
    {
        for (Link n=head1->next;n!=NULL;n=n->next)
        {
            if (m->data!=n->data)
            {
                cout<<m->data<<" ";
            }
        }
    }
    cout<<endl;
}
void main()
{
    Link head1;
    Link head2;
    cout<<"创建列表Head1:"<<endl;
    CreateList(head1);
    cout<<"创建列表Head2:"<<endl;
    CreateList(head2);
    cout<<"集合的交集:"<<endl;
    SetIntersection(head1,head2);
    cout<<"集合的并集:"<<endl;
    SetAltogeter(head1,head2);
    cout<<"集合的差:"<<endl;
    SetMission(head1,head2);
}


小弟初学,编译能通过就是建立第一个链表后第二个就出现异常了啊!望高手帮忙指正,谢谢!
编译情况:
创建列表Head1:
 1 2 3 4
创建列表Head2:
集合的交集:
Press any key to continue


------解决方案--------------------
sigh,你这代码简直一团糟。
建议你还是先学会怎么cin再弄吧。
或者你干脆不用cin,
给你两个固定的数组A[] = {1, 2, 3, 4,5}为其建立链表,再弄那个cin吧。
创建的过程也不对,cin也没用对。