单链表在不知头结点的情况下对第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结点。
但要注意的是,这种删除方法不能删除位于表尾的结点,因为他的后面再没有别的结点可以替换。
单链表在不知头结点的情况下对第i个元素的删除的更多相关文章
- cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针
实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a- ...
- css3种不知道宽高的情况下水平垂直居中的方法
第一种:display:table-cell 组合使用display:table-cell和vertical-align.text-align,使父元素内的所有行内元素水平垂直居中(内部div设置di ...
- c++单链表冒泡排序(交换结点),链表增删改查,运算符重载
#include <iostream> #include <stdlib.h> #include <time.h> #include <fstream> ...
- 建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
该逻辑对于删除第一个元素不适用. 这样的代码不优美 /** * Definition for singly-linked list. * struct ListNode { * int val; * ...
- C实现头插法和尾插法来构建单链表(不带头结点)
链表的构建事实上也就是不断插入节点的过程.而节点的插入能够分为头插法和尾插法. 头插法就是在头结点后插入该节点,始终把该节点作为第一个节点.尾插法就是在链表的最后一个节点处插入元素,作为最后一个节点. ...
- *单链表[递归&不带头结点]
不带头结点的单链表,递归法比较简明!(必背!) 单链表的结构: typedef struct node{ int data; struct node *next; }*List,Node; 创建第一种 ...
- C语言实现单链表(不带头结点)节点的插入
对单链表进行增删改查是最主要的操作.我在上一篇博客<C语言实现链表节点的删除>实现了删除单链表中的某个节点. 这里我们要来实如今某个位置插入节点.演示样例代码上传至https://gith ...
- 009实现一个算法来删除单链表中的一个结点,仅仅给出指向那个结点的指针(keep it up)
呵呵,这个题不能直接删除已知的结点.由于是单链表,不知道前驱,仅仅知道 后继结点,直接删除会使链表断开.只是我们能够删除已知结点的后继结点, 把后继结点的值赋值给已知结点. #include < ...
- Mysql实现无插入有更新(不知主键的情况下)
网上很多资料说有两种方式 (必须现有唯一键) 1.INSERT 中ON DUPLICATE KEY UPDATE的使用 2.REPLACE的使用 通过可以得出结果: 如果a和b字段 能决定唯一 例子: ...
随机推荐
- no package 'webkit-1.0' found
linux安装程序的时候 ./configure 提示 no package 'webkit-1.0' found 解决方法: 安装 libwebkitgrk-dev包 1. sudo apt-get ...
- MySQL字符集乱码
学数据库,最让人丧气的就是字符集的问题了,一旦出问题,就会有砸电脑的冲动,特别是在修改很多次字符集后依然不成功的时候! 我用的数据库软件是MySQL 5.1.28.最初出问题的时候,是这样的: 情景一 ...
- priority_queue 优先队列用法
//采用默认优先关系: //(priority_queue<int>que;) //Queue 0: // 91 83 72 56 47 36 22 14 10 7 3 // //采用结构 ...
- LintCode Maximum Depth of Binary Tree
1 /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, ...
- Android——课堂整理:assets目录和手机外部存储
layout文件: <Button android:layout_width="match_parent" android:layout_height="wrap_ ...
- 程序跳转到访问一个确定的地址0x100000
用函数指针 把这个确定的地址转化成一个函数指针 这就明白了程序中调用函数的意义 测试代码如下: #include <stdio.h> void getMemory() { printf(& ...
- 自定义滚动条样式(jQuery插件、Webkit、IE)
-------------jQuery滚动条插件------------- http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html http: ...
- (转) Deep learning architecture diagrams
FastML Machine learning made easy RSS Home Contents Popular Links Backgrounds About Deep learning ar ...
- oracle审计详解-转
http://blog.chinaunix.net/u2/66903/showart_2082884.htmlOracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这 ...
- docker swarm compose
swarm docker run swarm --help compose curl -L https://github.com/docker/compose/releases/download/1. ...