在带头结点的单链表L中,删除所有值为X的结点,并释放其空间,假设值为X的结点不唯一
//方法一:从头到尾扫描单链表
void delete(LinkList &L,Elemtype x)
{
//判断
//实现过程
LinkNode *p=L->next;
LinkNode *pre=L;
LinkNode *q;
//前驱结点和当前结点一起出发
while(p)
{
if(p->data==x)
{
q=p;
p=p->next;
pre->next=p;
free(q);
}
else
{
pre=p;
p=p->next;
}
}
}
//方法二采用尾插法建立单链表
void delete(LinkList &L,ElemType x)
{
//我没看答案,我感觉这个题目的思想应该是这样的,和上面那个题类似,就是利用链表的这种特性来实现对同一个链表同时的插入与扫描
LinkNode *p=L->next,*r;
r=L;//最开始的时候r是L的头指针
while(p!=null)
{
if(p->data!=x)
{
r->next=p;//建立连接
r=p;//r指针划向尾端
p=p->next;
//也就是说吧r是新链表的尾指针,但是它同时也是p的前一个指针
}
else
{
q=p;
p=p->next;
free(q);//释放掉
}
}
//循环结束表示已经全部扫描完了。
r->next=null;//插入结束后置未结点指针为null
}