一、首先,看看单链表中第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结点。

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

单链表在不知头结点的情况下对第i个元素的删除的更多相关文章

  1. cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针

    实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a- ...

  2. css3种不知道宽高的情况下水平垂直居中的方法

    第一种:display:table-cell 组合使用display:table-cell和vertical-align.text-align,使父元素内的所有行内元素水平垂直居中(内部div设置di ...

  3. c++单链表冒泡排序(交换结点),链表增删改查,运算符重载

    #include <iostream> #include <stdlib.h> #include <time.h> #include <fstream> ...

  4. 建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237

    该逻辑对于删除第一个元素不适用. 这样的代码不优美 /** * Definition for singly-linked list. * struct ListNode { * int val; * ...

  5. C实现头插法和尾插法来构建单链表(不带头结点)

    链表的构建事实上也就是不断插入节点的过程.而节点的插入能够分为头插法和尾插法. 头插法就是在头结点后插入该节点,始终把该节点作为第一个节点.尾插法就是在链表的最后一个节点处插入元素,作为最后一个节点. ...

  6. *单链表[递归&不带头结点]

    不带头结点的单链表,递归法比较简明!(必背!) 单链表的结构: typedef struct node{ int data; struct node *next; }*List,Node; 创建第一种 ...

  7. C语言实现单链表(不带头结点)节点的插入

    对单链表进行增删改查是最主要的操作.我在上一篇博客<C语言实现链表节点的删除>实现了删除单链表中的某个节点. 这里我们要来实如今某个位置插入节点.演示样例代码上传至https://gith ...

  8. 009实现一个算法来删除单链表中的一个结点,仅仅给出指向那个结点的指针(keep it up)

    呵呵,这个题不能直接删除已知的结点.由于是单链表,不知道前驱,仅仅知道 后继结点,直接删除会使链表断开.只是我们能够删除已知结点的后继结点, 把后继结点的值赋值给已知结点. #include < ...

  9. Mysql实现无插入有更新(不知主键的情况下)

    网上很多资料说有两种方式 (必须现有唯一键) 1.INSERT 中ON DUPLICATE KEY UPDATE的使用 2.REPLACE的使用 通过可以得出结果: 如果a和b字段 能决定唯一 例子: ...

随机推荐

  1. 推荐!国外程序员整理的 C++ 资源大全

    http://blog.jobbole.com/78901/ 关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz 发起和维护. 内容包括:标准库.Web应用框架.人工智能.数据库.图片处理 ...

  2. NullReferenceException UnityEngine.Transform.get_localPosition

    NullReferenceException  UnityEngine.Transform.get_localPosition unity程序中,需要取得GO自身的Transform,出现如上空异常, ...

  3. C#常用操作类库三(XML操作类)

    /// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...

  4. java.lang.ClassNotFoundException: Didn't find class "*****(转载)

    很多人出现了java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{*****Activity}: java. ...

  5. 利用scale9sprite制作动态聊天背景

    先上效果图 首先创建Scale9Sprite然后设置设置一个比较重要的属性 auto pScale9bg = ui::Scale9Sprite::create(); pScale9bg->set ...

  6. UVa 二叉树重建(先序+中序求后序)

    题意是给出先序和中序,求出后序. 先序遍历先访问根结点,通过根结点可以在中序中把序列分为左子树部分和右子树部分,我建了一个栈,因为后序遍历最后访问根结点,所以把每次访问的根结点放入栈中.因为后序遍历先 ...

  7. OS实验一实验报告

    实验一.命令解释程序的编写实验 专业:商业软件工程   姓名:王泽锴  学号:201406114113 一.实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语 ...

  8. Oracle学习系列7

    Oracle学习系列7 ************************************************************************************ 关联表 ...

  9. [转]Mysql命令行常用操作

    Mysql命令行常用操作 一.从命令行登录MySQL数据库服务器 1.登录使用默认3306端口的MySQL /usr/local/mysql/bin/mysql -u root -p 2.通过TCP连 ...

  10. 服务发现之 Etcd VS Consul

    抄自这里 *********************************************************************************************** ...