欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作

程序员文章站 2024-03-21 16:37:22
...

方法一:用p从头至尾扫描单链表,pre指向*p结点的前驱。
代码如下:

void Del_1(Linklist &L,ElemType x)
{
	LNode *p=L->next,*pre=L,*q;
	while(p!=NULL)
	{
		if(p->data==x)
		{
			q=p;
			p=p->next;
			pre->next=p;
			free(q);
		}else{
			pre=p;
			p-=p->next;
		}
	}
}

方法二:尾插法
代码如下:

void Del_2(Linklist &L,ElemType x)
{
	LNode *p=L->next,*r=L,*q;
	while(p!=NULL)
	{
		if(p->data!=x)
		{
			r->next=p;
			r=p;
			p=p->next;
		}else{
			q=p;
			p=p->next;
			free(q);
		}
	}
	r->next=NULL; //插入结束后置尾结点指针为NULL
}

不懂欢迎留言~