用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);
}