-
单链表中查找结点p并删除结点p
2015-05-21 05:14:44pointer *p,*q=NULL; p=find(head,i+1); cout<<p->data;... 网上的实现方法都是删除p的后继结点,我想直接删除p,按照我的想法上述语句应该是正确的,但是执行时候在q->next=p出显示又断点,怎么破 大神救我 -
删除单链表中重复的结点
2019-07-14 00:57:06删除已排序链表中重复的元素,使得每...遍历整个表,进入循环体:拿当前结点与后继结点进行对比,如果二者相同,直接删除这个后继结点,这样使得每个元素只出现一次; 如果二者不相同,把当前指针p顺序后移; void ...删除已排序链表中重复的元素,使得每个元素只出现一次
例如输入:1 -> 2 -> 2 -> 3
输出:1 ->2 -> 3算法思路:
- 表中并没有说明带有头结点,设头指针L,首结点p(指针为L)
- 遍历整个表,进入循环体:拿当前结点与后继结点进行对比,如果二者相同,直接删除这个后继结点,这样使得每个元素只出现一次;
- 如果二者不相同,把当前指针p顺序后移;
void delete_duplicates(LinkList &L){ ListNode* p =L; ListNode* q; /*这里解释下循环的限制:当链表不为空, 并且当前不为尾节点(最大为尾节点的前驱结点,当此时为尾节点的前驱时, 直接将当前结点p置为尾节点,因为此时p->next=NULL*/ while (p != NULL && p->next != NULL){ if (p->data == p->next->data){ q = p->next; //用于释放内存空间 p->next = p->next->next; free(q); }else{ p = p->next; } } }
-
实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点
2020-07-01 10:26:42如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点 typedef struct SListNode { int value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址 }...实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。
给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true直接free(p),这样行不通,因为我们不能访问其他结点;
如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点
typedef struct SListNode { int value; // 保存的值 struct SListNode* next; // 保存下一个结点的地址 } SListNode_t; bool deleteNode (SListNode_t *node) { if( NULL == node || NULL == node->next ) { return false; } SListNode_t * next = node->next; node->value = next->value; node->next = next->next; return true; }
-
【Java】实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点
2015-07-08 17:02:22如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点 public static boolean deleteNode (LinkListNode n) { if( null == n || null == n.next ) return false; ...直接free(p),这样行不通,因为我们不能访问其他结点;
如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点
public static boolean deleteNode (LinkListNode n) { if( null == n || null == n.next ) return false; LinkListNode next = n.next; n.data = next.data; n.next = next.next; return true; }
但是这样做有一个问题,如果我们要删除的是尾结点,这个算法就失效了,如果是尾结点,可以考虑将这个结点置为fake吗? -
带表头结点的单链表的基本操作
2019-03-23 10:26:051.删除P结点的直接后继结点 思路:先用工作结点保存P结点的直接后继,然后将P结点的指针域指向P结点的直接后继节点的直接后继节点,然后再删除该工作结点。 Q = P->next; P->next = P->next->next;...已知L 是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点
1.删除P结点的直接后继结点
思路:先用工作结点保存P结点的直接后继,然后将P结点的指针域指向P结点的直接后继节点的直接后继节点,然后再删除该工作结点。
Q = P->next;
P->next = P->next->next;
free(Q);
2.删除P节点的直接前驱结点(有毛病)
思路:用工作结点保存P结点,然后将表头结点赋给P结点,进行遍历,找到初始时P结点的直接前驱结点的直接前驱结点,即为此时的P结点,再将该P结点的指针域指向其直接后继结点的直接后继结点,即指向初始时的P结点
Q = P;
P = L;
while (P->next->next != Q) {
P = P->next;
}
P->next = P->next->next;
free(Q);
3.删除P结点(有毛病)
Q = P;
P = L;
while (P->next != Q) {
P = P->next;
}
P->next = P->next->next;
free(Q);
4.删除首元结点
P = L;
Q = P->next;
P->next = P->next->next;
free(Q);
5.删除尾元结点
while(P->next->next != NULL) {//找到尾元结点的直接前驱结点
P = P->next;
}
//P结点即为尾元结点的直接前驱,Q结点即为尾元结点
Q = P->next;
P->next = P->next->next;//尾元结点的指针域实际是指向空
free(Q);
-
单链表的删除
2017-05-25 16:34:00将表的第i个节点删去: ...next指向ai的直接后继结点 释放结点的空间 如图: 代码: include<stdio.h>#include<stdlib.h>#define OK 1 #define ERROR 0#define OVERFLOW 0typedef s... -
考研数据结构之线性表(1.7)——练习题之删除单链表重复值域(C表示)
2020-05-21 11:58:19将p所指的当前结点值域和其直接后继结点值域做比较。如果当前结点值域等于后继结点值域,则删除后继结点;否则p指向后继结点。重复以上过程,直到p的后继结点为空。 代码 #include <stdio.h> #include <... -
单链表的删除第i个元素
2019-08-28 18:11:13a2的节点q,要实现q的删除,就是让他的前继节点p绕过a2直接指向后继节点a3。 p->next=p->next->next; 单链表第i个数据删除结点的算法思路: 1.声明结点p指向链表第一个结点,初始化j=1; 2.当j<i时,就... -
408数据结构综合题
2020-09-07 23:01:18将p所指的当前结点值域和直接后继结点值域做比较。如果当前结点值域等于后继结点值域,则删除后继结点;否则p指向后继结点。重复以上过程,直到p的后继结点为空。 ** 答案: void delsl1(LNode *L) { LNode *p=L-&... -
lesson17-2 《数据结构与算法》P37Q55
2020-08-21 19:11:53(3)若该数值是偶数,则将其直接后继结点删除。 代码: void swapOrDelete_(LNode *L){//函数分解思想 LNode* min=findMinNode(L);//不知道最小值data是哪个节点 => 我去拿这个节点=>函数要返回一个结点... -
Java数据结构-线性表之单链表应用-重复节点的删除
2019-09-15 18:14:34建立指针q,q遍历p后面的结点,并与p数值比较; 如果q与p值相等,则删除q。如果q有后继节点,则将q前驱节点和q后继节点链接起来;否则直接开始下一轮遍历。 Java代码实现如下,建议将这段代码cop... -
数据结构学习笔记(七)链表算法题(续)
2015-03-04 18:54:36第一题 问题 有一个递增非空单链表,设计一个算法删除值域重复的结点。...将p所指当前结点值域和其直接后继结点值域比较。如果当前结点值域等于后继结点值域,删除后继结点;否则p指向后继结点,重复以上... -
红黑树
2019-09-17 10:05:35转载: https://www.jianshu.com/p/e136ec79235c 二叉树删除结点找替代结点有3种情情景: ...补充说明下,情景3的后继结点是大于删除结点的最小结点,也是删除结点的右子树种最左结点。那么可以拿... -
动态查找表(树表的查找)
2020-07-18 07:19:01一、二叉排序树(BST)... 方法二:p与中序直接后继交换,再删除p 在中序(LPR)线索二叉树的遍历那里,介绍过这样一个规律,回忆一下: p结点的中序直接前驱就是其左子树中最右下的结点(也就是值最大的那个 -
二叉搜索树之二
2017-05-02 21:17:19二叉查找树的删除情况(1) 结点p无左右子树,则直接删除该结点,修改父节点相应指针(2)结点p有左子树(右子树),则把p的左子树(右子树)接到p的父节点上(3) 左右子树同时存在,则... 找到结点p的中序直接后继结 -
图片有的不显示.br标签和a标签直接显示出来.版本0.1.0. 文本如下
2020-12-04 13:58:15要删除p节点,首先需要将a1的后驱指向a3,然后将a3的前驱指向a1,最后将p节点释放掉即可。 结点的插入: <img alt="" src=... -
数据结构第6讲--习题课.pptx
2020-09-18 16:35:31第2章 线性表 第6讲... 删除p的直接后继; 删除尾结点;逆置;对于就地逆置的启发;1.就地逆置单链表;1.就地逆置单链表;1.就地逆置单链表;LinkList reverse(LinkList list) { PNode p, q=list, r; if (q==NULL || q->li -
常用数据结构汇总
2016-05-22 15:22:46该存储地址是在其直接前趋结点ai-1的next域中,因此,必须首先找到ai-1的存储位置p,然后令p–>next指向ai的直接后继结点,即把ai从链上摘下。最后释放结点ai的空间,将其归还给“存储池”。 设单链表长度为n,则... -
单链表经典算法与时间复杂度分析
2020-04-13 18:03:25定义的指针p指向头结点因为不是双链表所以p每次的指向必须为直接前驱,循环控制条件是如果p的直接后继不是我们要找的值并且p不是最后一个结点,循环就可以继续,对应的跳出循环有两种情况,第一种是找到了,删除释放... -
数据结构(1)-JAVA-掌握头插法和尾插法创建单链表及单链表的基本运算
2019-11-07 19:17:53学习数据结构创建单链表 创建单链表的两种方法:头插法,尾插法 基本运算: ...删除结点q的直接后继 显示线性表的数据元素值 直接上代码:package ds.linklist; /*** * 线性表的抽象数据类型... -
数据结构(C#版)笔记(二)
2018-09-17 11:44:53接前驱结点的地址,叫 prev,一个直接后继结点的地址,叫 next,这样的链表就 是双向链表(Doubly Linked List)。 插入操作: ➀ p.Next.Prev = s; ➁ s.Prev = p; ➂ s.Next = p.Next; ➃ p.Next = s; 删除操作: ... -
C语言-数据结构-线索二叉树
2020-12-05 23:19:35C语言-数据结构-线索二叉树线索二叉树的定义线索二叉树建立定义结构体类型创建线索二叉树将二叉树中序线索化中序线索化二叉树的部分操作查找结点p的前驱查找结点p的直接后继~~插入右结点~~~~插入左结点~~~~删除节点~... -
数据结构vl怎么求_数据结构
2021-01-11 20:29:44《数据结构》作业一.选择题1.在数据结构中,从逻辑上可以把数据结构分成(C)。A.动态结构和静态结构B....若删除非空线性链表中由p所指链结点的直接后继结点的过程是依次执行(B)A.r=p->next;p->n... -
代码没有错误,为什么程序没运行完就直接结束了?
2019-08-08 14:41:22//递归定义指向后继结点的指针 }; /* Stacknode的实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(int &newdata,Stacknode *nextp)//构造函数 ... -
数据结构之线性表1:顺序表
2020-08-09 09:29:17初始结点有后继无前驱,终端结点有前驱无后继,中间结点,内部结点有且仅有一个直接前驱和一个直接后继。 归结为:关系线性化,结点顺序存 内存分配函数 使用以下函数需要加载头文件<stdlib.h> malloc(m)函数... -
用c描述的数据结构演示软件
2012-07-24 13:31:25在二叉树线索化的过程中,图中指针 p 指向当前层二叉树的根结点,指针 pre 指向当前被访问的结点的前驱。在演示线索树的插入和删除过程时,图示窗口的下方还包括“输入行”和“提示行”。 18. 按先序序列建二叉... -
线性表2--单链表
2016-07-25 16:18:34插入要考虑实在p的前面插入还是后面:在p的后面直接插入即可,若是在p前面,则要先找到p的直接前驱。 删除:不需要移动任何元素 逆置:比如原表为a0,a1,a2,a3,首先移动a1插入到head(头结点)和a0之间,然后再移动... -
《数据结构 1800题》
2012-12-27 16:52:0311. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( )【上海海运学院 1999 一、1(1分)】 12. 数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。( ) 【华南理工大学 2002... -
【716-Week 02】由一般化到特殊化演变的树
2020-11-25 07:54:19所有的数学性质是直接可以使用的</p> <ol><li>高度为 <code>h</code> 的二叉树至多有 <code>2^h</code> 个叶子结点</li><li>高度为 h≥0 的二叉树至少有 <code>h+1</code> 个结点</li><li>高度不超过 h(≥0) 的...