链表中用标兵结点简化代码 分类: c/c++ 2014-09-29 23:10 475人阅读 评论(0) 收藏

标兵结点(头结点)是在链表中的第一个结点,不存放数据,仅仅是个标记
利用标兵结点可以简化代码。下面实现双向链表中的按值删除元素的函数,分别实现

带标兵结点和不带标兵结点两版本,对比可见标兵结点的好处。

结点声明如下:

struct Node
{
	int value;
	Node *prev;
	Node *next;	
}
int del_doublelist(Node*&h,int v)//不带标兵结点
{
	Node*p=h;
	while(p!=NULL&&p->value!=v)
	{
		p=p->next;
	}
	if(p==NULL)return 0;//空链表
	if(p->value==v)
	{
		if(p->next==NULL&&p->prev==NULL)//只有一个结点
		{
			h=NULL;
			free(p);
		}
		else if(p->next==NULL)//尾结点
		{
			p->prev->next=NULL;
			free(p);	
		}
		else if(p->prev==NULL)//头结点
		{
			h=p->next;
			h->prev=NULL;
			free(p);
		}
		else//中间结点
		{
			p->prev->next=p->next;
			p->next->prev=p->prev;
			free(p);
		}
		return 1;
	}
}

int del_doublelist(Node*&h,int v)//带标兵结点
{
	Node*p=h->next;
	while(p!=NULL&&p->value!=v)
	{
		p=p->next;
	}
	if(p==NULL)return 0;
	if(p->value==v)
	{
		if(p->next==NULL)//尾结点
		{
			p->next->prev=p->prev;
			free(p);
		}
		else//中间结点
		{
			p->next->prev=p->prev;
			p->prev->next=p->next;
			free(p);
		}
		return 1;
	}
}



    
        

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2014-09-29 23:10  xiaoluo91  阅读(174)  评论(0编辑  收藏  举报