非空整数单链表删除值重复的结点,哪错了🥹🥹

用p遍历整数单链表L,preq和q遍历p结点之后的结点(初始时preq=p,q=p->next),若q->data==p->data,通过preq删除q结点,q=preq->next;否则preq、q同步后移。
#include "SLinkNode.cpp"
void Dsccf(SLinkNode *&L)
{
SLinkNode *p=L->next,*preq=p,*q;
while(p->next!=NULL)
{
q=p->next;
if(q->data==p->data)
{

      free(q);
     q=preq->next; 
  }
  else
    {
        p=p->next;
         q=q->next;
     }    
}

}
int main()
{
SLinkNode *L;
InitList(L);
ElemType a[]={2,3,3,4,5,6,0,0};
int n=sizeof(a)/sizeof(a[0]);
CreateListR(L,a,n);
printf("线性表:");DispList(L);
Dsccf(L);
printf("线性表:");DispList(L);
DestroyList(L);

}

q=preq->next;
这个preq你只是初始化了一下,后面循环过程都没有动啊