简单链表有关问题

简单链表问题
我怎么也找不到错误,编译、连接都没问题,运行就内存错误。
我仅仅是想在不排序的情况下实现两个链表的交集。
您抽出时间看一下我万分感谢!!

#include <iostream.h>
#include <malloc.h>
#include <stdlib.h>

struct   LNode
{
int   data;
struct   LNode*   next;
};

void   CreateList(LNode*   &l,int   n)
{
l=(LNode*)malloc(sizeof(LNode));
l-> next=NULL;
for(int   i=n;i> 0;--i)
{
        LNode*   p=(LNode*)malloc(sizeof(LNode));
        cin> > p-> data;
        p-> next=l-> next;
        l-> next=p;    
}
}

void   ShowList(LNode*   &l)
{
LNode*   p=l-> next;
while(p)
{
        cout < <p-> data < < "   ";
        p=p-> next;
}
cout < <endl;
}

void   Interest(LNode*   &la,LNode*   &lb)
{
//关键就是这个函数了!!
        LNode*   pa=la-> next;
        LNode*   pb=lb-> next;  
        LNode*   p=la;
        while(pa)
        {
          int   i=0;
          while(pb)
          {
            if(pa-> data==pb-> data)   {i=1;break;}
            else   {pb=pb-> next;}
          }
          if(i=1)  
          {p=pa;pa=pa-> next;}
          if(i=0)
          {
        p-> next=pa-> next;
        free(pa);
        pa=p-> next;
          }
          pb=pb-> next;
        }
}

void   main()
{
int   m,n;
cout < < "请输入第一个链表长度: ";
cin> > m;
LNode   *p,*q;
CreateList(p,m);
ShowList(p);
cout < < "请输入第二个链表长度: ";
cin> > n;
CreateList(q,n);
ShowList(q);
cout < < "两个链表的交集: " < <endl;
Interest(p,q);
ShowList(p);
}


------解决方案--------------------
while(pb) // step 1
{
if(pa-> data==pb-> data)
{
i=1;
break;
}
else
{
pb=pb-> next;
}
}

if(i=1)
{
p=pa;pa=pa-> next;}
if(i=0)
{
p-> next=pa-> next;
free(pa);
pa=p-> next;
}
// step2 , 在step1的时候,没有执行break的情况下,pb跳出循环时值为NULL,这个地址是不允许访问的,导致你的程序出错.加上判断即可避免
if (pb)
{
pb=pb-> next;
}