双链表插入 删除详解


节点结构:

struct both_node
{
	int key;
	struct both_node *prev;
	struct both_node *next;
	both_node(int k)
		:key(k),prev(NULL),next(NULL)
	{}
};


不带头节点的双链表实现插入 删除,

双链表
//插入
void insert_both(both_node *&head,int key)
{
     if(head==NULL)
    {
         head= new both_node(key);
    } else
    {
         both_node *tmp= new both_node(key);
          if(head->next==NULL)//当插入时链表中只有一个节点的时候
         {
             head->next=tmp;
             tmp->prev=head;
         } else //链表中已经至少有两个节点
         {
             tmp->next=head->next;
             head->next->prev=tmp;

             head->next=tmp;
             tmp->prev=head;
         }
    }
}
//删除
bool remove_both(both_node *&head,int key)
{
     if(head==NULL)
          return false ;
     if(head->key==key)//如果是头节点
    {
          if(head->next==NULL)//如果只有一个节点
         {
              delete head;
             head=NULL;
         } else//链表后面还有节点
         {
             both_node *tmp=head;
             head=head->next;
             head->prev=NULL;
              delete tmp;
             tmp=NULL;
         }
          return true ;
    }
    both_node *cur=head->next;
     while(cur !=NULL && cur->key !=key)
         cur=cur->next;
     if(cur==NULL)//没有找到
          return false ;
     if(cur->next !=NULL)//删除的不是尾节点
    {
         cur->prev->next=cur->next;
         cur->next->prev=cur->prev;
    } else //删除的是尾节点
    {
         cur->prev->next=NULL;
    }
    
     delete cur;
    cur=NULL;
     return true ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值