单链表 | | 按位序删除&指定结点删除

//按位序删除(带头结点)
bool ListDelete(LinkList &L ,int i,int &e){
    if(i<1)
    return false;
    LNode *p;   //指针p指向当前扫描结点 
    int j=0;   //当前p指向的是第几个结点 
    P=L;       //L指向头结点,头结点是第0个结点,不存放数据 
    if(p!=NULL&&j<i-1){ //循环找到第i-1个结点
      p=p->next;
      j++; 
    }
    if(P==NULL) //i值不合法
     return false;
    if(p->next==NULL) //第i-1个结点后已无其它结点 
     return false;

     LNode*q=p->next; //令q指向被删除的结点
     e=q->data;
     p->next=q->next;
     free(q); 
     return true; 
} 

 

//删除指定结点
bool DeleteNode(LNode *p){
    if(p==NULL)
      return false;
      LNode *q=p->next;  //令q指向*p的后继结点
      p->data=p->next->data;  //和后继结点交换数据域
      p->next=q->next;
      free(q);
      return true; 
}
//如果p结点是最后一个结点,则只能从表头开始依次寻找p的前驱 ,时间复杂度O(n)

 

posted @ 2020-04-16 21:56  iiiiiki  阅读(636)  评论(0)    收藏  举报