【数据结构总结】链表头和尾的delete 和insert操作

    对链表头和尾的操作实际上就是一个对链表操作的特殊情况考虑的过程。
1. 对于delete操作来说

    考虑是不是空结点;

    考虑是不是链表头;

    考虑是不是链表尾;

 

      如果是空结点,直接报错;如果是头结点,删除前先将头指针赋值给新结点,移动头指针,将新节点删除,返回头指针;如果是尾结点(尾结点的下一个是NULL),则需从头指针进行遍历,一直找到尾结点的前面一个结点,然后将尾结点重置。

 

2. 对于insert操作来说:

    先要判断原链表是否为空,如果为空的话,则出入空结点相当于创建一个链表;如果原链表不为空链表,而插入结点为空的话,直接报错;如果插入结点是头结点,则将头结点重置即可;如果插入结点是尾结点,则遍历找到尾结点,并将为节点重置即可。

 

 

代码实现:

 

int delete(element *elem)

{

   if(!elem)

    return 0;

 

  element *curPos=(element*)malloc(sizeof(element));

  curPos=head;

 

  if(elem==head)

   {

     head=head->next;

     free(elem);

     return 1;

     if(!head)

       tail=NULL;

    }

 

  while(curPos)

  {

    if(curPos->next==elem)

      curPos->next=elem->next;

    free(elem);

    if(curPos->next==NULL)

       { tail=curPos;

   return 1;}

   curPos=curPos->next;

   }

return 0;

}

 

这里的elem是一个坐标结点,我们要插入的结点的位置就是在elem之后

int insert(element *elem, int data)

{

    element *curPos=head;

    element *newElem=(element*)malloc(sizeof(element));

    if(!newElem)

       return 0;

    newElem->data=data;

    if(!elem)

    {

      newElem->head;

      head=newElem;

      if(!tail)

        tail=newElem;

      cruPos=NULL;

      return 1;

    }

 

    while(curPos)

    {

       if(curPos==elem)

       {

         newElem->next=curPos-next;

         curPos->next=newElem;

         if(!(newElem->next))

           tail=newElem;

         return 1;

       }

 

     curPos=curPos->next;

    }

    free(newElem);

    return 0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值