码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-30 01:21:31      阅读:322      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!