怎么删除一个已建立的链表

如何删除一个已建立的链表?
int   PRIME::Reset()
{
prime   *preset,*p;
preset=listhead;
while(preset!=NULL)
{
p=preset;
delete   preset;
preset=p-> next;
}
listhead=NULL;//重置头尾指针和计数器
listend=NULL;
count=0;
cout < < "Finished.\n ";//清理完毕
return   1;
}

为什么我的这个函数运行的时候会出现内存访问错误?

------解决方案--------------------
p=preset;
delete preset;
preset=p-> next;

----
顺序问题
p=preset-> next;
delete preset;
preset=p;