精华内容
下载资源
问答
  • pointer *p,*q=NULL; p=find(head,i+1); cout<<p->data;... 网上的实现方法都是删除p的后继结点,我想直接删除p,按照我的想法上述语句应该是正确的,但是执行时候在q->next=p出显示又断点,怎么破 大神救我
  • 删除已排序链表中重复元素,使得每...遍历整个表,进入循环体:拿当前结点与后继结点进行对比,如果二者相同,直接删除这个后继结点,这样使得每个元素只出现一次; 如果二者不相同,把当前指针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;
    			}
    	}
    }		
    
    展开全文
  • 如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点 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;
    }
    

     

    展开全文
  • 如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点 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:05
    1.删除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...
  • 将p所指的当前结点值域和其直接后继结点值域做比较。如果当前结点值域等于后继结点值域,则删除后继结点;否则p指向后继结点。重复以上过程,直到p的后继结点为空。 代码 #include <stdio.h> #include <...
  • 单链表的删除第i个元素

    千次阅读 2019-08-28 18:11:13
    a2节点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-&...
  • (3)若该数值是偶数,则将其直接后继结点删除。 代码: void swapOrDelete_(LNode *L){//函数分解思想 LNode* min=findMinNode(L);//不知道最小值data是哪个节点 => 我去拿这个节点=>函数要返回一个结点...
  • 建立指针q,q遍历p后面的结点,并与p数值比较; 如果q与p值相等,则删除q。如果q有后继节点,则将q前驱节点和q后继节点链接起来;否则直接开始下一轮遍历。 Java代码实现如下,建议将这段代码cop...
  • 第一题 问题 有一个递增非空单链表,设计一个算法删除值域重复结点。...将p所指当前结点值域和其直接后继结点值域比较。如果当前结点值域等于后继结点值域,删除后继结点;否则p指向后继结点,重复以上...
  • 红黑树

    2019-09-17 10:05:35
    转载: https://www.jianshu.com/p/e136ec79235c 二叉树删除结点找替代结点有3种情情景: ...补充说明下,情景3的后继结点是大于删除结点最小结点,也是删除结点右子树种最左结点。那么可以拿...
  • 一、二叉排序树(BST)...   方法二:p与中序直接后继交换,再删除p 在中序(LPR)线索二叉树遍历那里,介绍过这样一个规律,回忆一下:    p结点的中序直接前驱就是其左子树中最右下的结点(也就是值最大那个
  • 二叉搜索树之二

    2017-05-02 21:17:19
    二叉查找树的删除情况(1) 结点p无左右子树,则直接删除结点,修改父节点相应指针(2)结点p有左子树(右子树),则把p的左子树(右子树)接到p的父节点上(3) 左右子树同时存在,则... 找到结点p的中序直接后继
  • 删除p节点,首先需要将a1后驱指向a3,然后将a3前驱指向a1,最后将p节点释放掉即可。 结点的插入: <img alt="" src=...
  • 第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不是最后一个结点,循环就可以继续,对应的跳出循环有两种情况,第一种是找到了,删除释放...
  • 学习数据结构创建单链表 创建单链表的两种方法:头插法,尾插法 基本运算: ...删除结点q的直接后继 显示线性表的数据元素值 直接上代码:package ds.linklist; /***  * 线性表的抽象数据类型...
  • 接前驱结点地址,叫 prev,一个直接后继结点的地址,叫 next,这样链表就 是双向链表(Doubly Linked List)。 插入操作: ➀ p.Next.Prev = s; ➁ s.Prev = p; ➂ s.Next = p.Next; ➃ p.Next = s; 删除操作: ...
  • C语言-数据结构-线索二叉树线索二叉树的定义线索二叉树建立定义结构体类型创建线索二叉树将二叉树中序线索化中序线索化二叉树的部分操作查找结点p的前驱查找结点p的直接后继~~插入右结点~~~~插入左结点~~~~删除节点~...
  • 《数据结构》作业一.选择题1.在数据结构中,从逻辑上可以把数据结构分成(C)。A.动态结构和静态结构B....若删除非空线性链表中由p所指链结点的直接后继结点的过程是依次执行(B)A.r=p->next;p->n...
  • //递归定义指向后继结点的指针 }; /* Stacknode实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(int &newdata,Stacknode *nextp)//构造函数 ...
  • 初始结点有后继无前驱,终端结点有前驱无后继,中间结点,内部结点有且仅有一个直接前驱和一个直接后继。 归结为:关系线性化,结点顺序存 内存分配函数 使用以下函数需要加载头文件<stdlib.h> malloc(m)函数...
  • 在二叉树线索化过程中,图中指针 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:03
    11. 顺序存储方式优点是存储密度大,且插入、删除运算效率高。( )【上海海运学院 1999 一、1(1分)】 12. 数据结构基本操作设置最重要准则是,实现应用程序与存储结构独立。( ) 【华南理工大学 2002...
  • 所有数学性质是直接可以使用</p> <ol><li>高度为 <code>h</code> 二叉树至多有 <code>2^h</code> 个叶子结点</li><li>高度为 h≥0 二叉树至少有 <code>h+1</code> 个结点</li><li>高度不超过 h(≥0) ...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
热门标签
关键字:

删除p的直接后继结点