首页 > 其他 > 详细

链表中用标兵结点简化代码

时间:2014-09-29 23:22:42      阅读:392      评论:0      收藏: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;
	}
}


链表中用标兵结点简化代码

原文:http://blog.csdn.net/u010839382/article/details/39677849

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!