zoukankan      html  css  js  c++  java
  • 链表中用标兵结点简化代码 分类: 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;
    	}
    }


    
        
            

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

  • 相关阅读:
    Node.js 笔记03
    Node.js 笔记02
    Node.js 笔记01
    源代码管理工具-git
    ES6笔记01
    07_查找、软链接、打包压缩、软件安装
    06_系统信息相关命令
    oracle序列中cache和nocache
    PL/SQL规范、块、过程、函数、包、触发器
    对Xcode菜单选项的详细探索(干货)
  • 原文地址:https://www.cnblogs.com/luo-peng/p/4646246.html
Copyright © 2011-2022 走看看