zoukankan      html  css  js  c++  java
  • 单链表在不知头结点的情况下对第i个元素的删除

    一、首先,看看单链表中第i个元素的删除:

    Status ListDelete_L (LinkList &L,int i,ElemType &e){

    //在带头结点的单链表L中,删除第i个元素,并由e返回其值

    p=L;j=0;

    while(p->next&&j<i-1){                     //寻找第i个结点,并令p指向其前驱

    p=p->next;

    ++j;

    }

    if(!(p->next)||j<i-1)return ERROR;  //删除位置不合理

    q=p->next;p->next=q->next;          //删除并释放结点

    e=q->data;free(q);

    return OK;

    }

    例如对单链表L中第3个元素C的删除,即对第4个结点删除:

    1) 最开始时P指针指向头结点,j=0

     

     

    2) 执行循环语句,当j=2时,p指向第三个结点,循环结束;

     

    3) q=p->next;p->next=q->next; 删除并释放结点;

     

    则实现了C结点的删除。

    二、单链表在不知头结点的情况下对第i个元素的删除:

    例如对B结点的删除,最开始只知道指向B结点的指针q,因为是单链表,不能获取到前驱指针,所以不能用上面的方法进行删除。

     

    可以用下面的语句实现q结点的删除:

    q->data=q->next->data;

    q->next=q->next->next;

    此时,L单链表变为:

     

        虽然删除的是C结点,但它把C中的数据复制到B中,相当于删除了B结点。

        但要注意的是,这种删除方法不能删除位于表尾的结点,因为他的后面再没有别的结点可以替换。

  • 相关阅读:
    多任务拷贝小案例
    进程池
    进程间的通信
    互斥锁
    创建函数/类的线程
    udp/tcp流程
    发布模块
    私有属性/方法的访问
    深入了解jQuery之整体架构
    (转)前端面试题
  • 原文地址:https://www.cnblogs.com/mzct123/p/4897438.html
Copyright © 2011-2022 走看看