删去单链表中第i个节点的操作。删除单链表中数据域为x的前驱元素。数据结构。
来源:互联网 发布:淘宝外宣兼职违法吗 编辑:程序博客网 时间:2024/05/01 06:16
如何删除单链表中第i个节点?
先来看看删除的原理:因为数据结构是单链表,要想删除第i个节点,就要找到第i个节点;要想找到第i个节点,就要找到第i-1个节点;要想找到第i-1个节点,就要找到第i-2个节点......于是就要从第一个节点开始找起,一直找到第i-1个节点。如何找?让一个指针从头结点开始移动,一直移动到第i-1个节点为止。这个过程中可以用一个变量j从0开始计数,一直自增到i-1。
之后呢?我们把第i-1个节点找到了,就让它的指针域指向第i+1个节点,这样就达到了删除的目的。而第i+1个节点的地址又从第i个节点获得,第i个节点的地址又是第i-1个节点的后继。因此我们可以这样做:先让一个指针指向第i-1个节点的后继,(保存i+1节点的地址),再让i-1节点的后继指向第i个节点的后继,这样就将第i个节点删除了。
再来看看删除的时候会遇到什么意外情况:
1.有可能单链表一开始就为空。这样的话连第i-1个元素都找不到。
2.有可能找不到第i个节点,原因是第i-1的后继为空。
3.有可能删除的位置不合理,比如删除第-1个节点。
如何删除单链表中数据域为x的前驱节点?
这个删除操作其实和上面的类似。关键是要知道三个地址,p->第i-2个节点的地址,q->第i-1个节点的地址,r->元素为x的第i个节点的地址。(为什么?因为我们要删除的是第i-1个节点。要想删除它,就既要找到第i-2个节点,又要找到元素为x的第i个节点)
假设三个指针,p,q,r。p=L(L为头结点的地址)。q=p->next;(这里要注意先判断q是否为空?如果q为空,意味着L->next为空。空链表,不予受理!!!!!!)r=q->next;(这样子,三个指针就连续了)
当r->data!=X,并且r!=null时(最前面的指针指向的节点数据域不是x,并且这个指针有节点去指向)
让指针移动,p=q;q=r;r=r->next;这样就找到了满足条件的三个地址。
找到了地址,下一步是删除。要注意的一点是,什么时候可以删除?只有当r!=null,才能删。否则不满足题目一开始的条件了。
删除操作:p->next=q->next;free(q);
阅读全文
0 0
- 删去单链表中第i个节点的操作。删除单链表中数据域为x的前驱元素。数据结构。
- 给出一个循环双链表,p指向第一个元素值为x的节点,设计算法删除节点*p
- 循环结点的前驱删除操作
- 顺序表中删除元素值为x的操作
- 在单链表中删除所有元素值为X的元素
- 删除单链表中第i个节点
- 每周数据结构【1】:不带头结点删除所有值为x的节点
- 删除单链表中所有值为x的元素
- 面试题:删除数组从下标数为i开始的j个元素
- 在带头节点的单链表中,删除所有值为x的节点(Java实现)
- 数据结构—链表-单链表应用-删除元素最大的节点
- 无头节点,删除已知节点的前驱(循环链表)
- 删除单链表中元素值最大的节点
- 删除线性表中所有值为x的数据元素
- 在非递减的有序单链表中插入一个值为x的数据元素,并使单链表仍保持有序的操作
- java 删除链表中值为x的节点
- 数据结构之 删除顺序表中所有元素为X 的元素,要求时间复杂度为O(n),空间复杂度为O(1)
- 求链表最大节点的前驱结点
- 开关电源设计中电感的选择
- java volatile
- Trapping rain water
- 匈牙利算法模板
- Kattis
- 删去单链表中第i个节点的操作。删除单链表中数据域为x的前驱元素。数据结构。
- SQL学习—INSERT、UPDATE、DELETE语句
- c++中的friend友元
- 【设计模式】-原型模式
- 344. Reverse String
- 每日一道算法题(7)
- jinfo_动态调整JVM参数(无需重启)(实践)
- 【Tenka1 Programmer Contest 2017 F】ModularPowerEquation!!(欧拉定理)
- 向数据库存储读取图片方法总结