精华内容
下载资源
问答
  • 交换P所指结点与其下一个结点的位置 题目 已知线性表的第一个结点由list指出,请写一个算法,交换P所指结点与其下一个结点的位置(假设p指向的不是链表中的最后一个结点)。 分析 算法分两部分 第一:当p所指...

    交换P所指结点与其下一个结点的位置

    题目

    已知线性表的第一个结点由list指出,请写一个算法,交换P所指结点与其下一个结点的位置(假设p指向的不是链表中的最后一个结点)。

    分析

    算法分两部分

    • 第一:当p所指的是链表的第一个结点时;
    • 第二:当P所指的是链表的中间结点时;

    代码

    // 交换P所指结点与其下一个结点的位置
    LinkList EXCHANGE(LinkList list,LinkList p){    
    	LinkList q = list;    
    	if (p==q)    {        
    		list=list->link;       
    		p->link=p->link->link;        
    		list->link=p;    
    	}else    {        
    		while (q->link!=p)   {           
    			q=q->link;        
    		}        
    		// 这里的顺序不能换,避免断链。        
    		q->link=p->link;        
    		p->link=p->link->link;        
    		q->link->link=p;            
    	}    
        return list ;    
    }
    
    展开全文
  • 假设二叉树采用二叉链表方式存储, root指向根结点,p所指结点和q所指结点为二叉树中的两个结点,编写一个计算它们的最近的共同祖先,函数定义如下: BiTNode * nearest_ancestor(BiTree root, BiTNode *p, ...

    共同祖先

    假设二叉树采用二叉链表方式存储, root指向根结点,p所指结点和q所指结点为二叉树中的两个结点,编写一个计算它们的最近的共同祖先,函数定义如下:

    BiTNode * nearest_ancestor(BiTree root, BiTNode *p, BiTNode *q);
    

    其中 root 指向二叉树的根结点,p 和 q 分别指向二叉树中的两个结点。
    提示:在完成本题时,可利用 path 函数获取p和q两个结点到根结点之间的路径,之后再计算两条公共路径得出最近的共同祖先。path函数及栈相关定义如下:

    bool path(BiTNode* root, BiTNode* node, Stack* s);
    
    #define Stack_Size 50
    typedef BiTNode* ElemType;
    typedef struct{
        ElemType elem[Stack_Size];
        int top;
    }Stack;
    
    void init_stack(Stack *S); // 初始化栈
    bool push(Stack* S, ElemType x); //x 入栈
    bool pop(Stack* S, ElemType *px); //出栈,元素保存到px所指的单元,函数返回true,栈为空时返回 false
    bool top(Stack* S, ElemType *px); //获取栈顶元素,将其保存到px所指的单元,函数返回true,栈满时返回 false
    bool is_empty(Stack* S);  // 栈为空时返回 true,否则返回 false
    

    提供代码

    #include <stdlib.h>
    #include <stdio.h>
    #include "bitree.h" //请不要删除,否则检查不通过
    
    
    BiTNode * nearest_ancestor(BiTree root, BiTNode *p, BiTNode *q){
    
    
    }

    参考代码

    BiTNode* nearest_ancestor(BiTree root, BiTNode* p, BiTNode* q)
    {
        Stack s1, s2;
        BiTNode* ancNode;
        init_stack(&s1);
        init_stack(&s2);
    	
        path(root, p, &s1);
        path(root, q, &s2);
    	
    	if (s1.elem[0] != s2.elem[0])
            return NULL;
    	
        ancNode = s1.elem[0];
        
        for (int i = 1; i < s1.top && i < s2.top; i++) 
    	{
            if (s1.elem[i] != s2.elem[i])
                return ancNode;
            ancNode = s1.elem[i];
        }
        return ancNode;
    }

    展开全文
  • 这个题目很有意思哈,第一反应是s->...我们知道的是p、q都是结构体指针变量,当p、q指向某个结点的时候,意味着结点的首地址赋予了p、q指针变量,也就是说这两个结点的地址是已知的,所以可以q->next=s..

    这个题目很有意思哈,第一反应是s->next=q->next,q->next=s,然后一瞅答案没有,并且还给出了答案是c,我说不能啊,这不p的结点地址丢失了嘛,果断认为题目错了,并且网上找答案,结果折腾一会发现网上答案都是说c,但是都没有具体给出解释,也有稀疏几个人和我的答案一样,后面再瞅了几眼题目,发现了问题所在。我们知道的是p、q都是结构体指针变量,当p、q指向某个结点的时候,意味着结点的首地址赋予了p、q指针变量,也就是说这两个结点的地址是已知的,所以可以q->next=s,s->next=p(当然上面的s->next=q->next,q->next=s也是可以的)。不像之前的只给出的一个结构体指针变量p,然后在其后面后面插入一个新的结点,那就要考虑到断链的情况。

    展开全文
  • 姐: s->next = p;s->prior = p->prior;p->prior->next = s;p->prior = s

    姐:

    s->next = p;s->prior = p->prior;p->prior->next = s;p->prior = s
    在这里插入图片描述

    展开全文
  • 在双向链表存储结构中,删除p所指结点时需修改指针的操作为 p-&gt;next-&gt;prior=p-&gt;prior; p-&gt;prior-&gt;next=p-&gt;next; p-&gt;next=p-&gt;next-&gt;next;p-&...
  • 在双向链表存储结构中,删除p所指结点时须修改指针()【MOOC选择题】
  •  算法思想:我们无法得到p所指结点的前驱,但是其后继是知道的,当前结点和后继结点的区别是data的不同,我们可以将p所指向结点的后继的值赋给p所指向的结点,将p所指向结点的后继删除,将该后继的后继地址赋给p的...
  • #include<stdio.h>/*2009.10.25晚写于白鹿原*/ #include <malloc.h>/*求树根结点到r所指结点之间的路径*/ #include <conio.h><br />#define Stack_Size 50 typedef int DataType; ...
  • 题目描述:在一个单链表中,不知道头结点,也不知道有多长和是否存在循环,要求删除指针P所指的节点,注意P不为最后一个节点!\color{blue}{题目描述:}\color{purple}{在一个单链表中,不知道头结点,也不知道有多...
  • #include typedef int ElemType; typedef struct { ElemType data; struct LNode *next; }LNode, *CLinkList;...void initLink(CLinkList L);...void createLink... p = p->next; } r->next = s; free(p); }
  • pointer *p,*q=NULL; p=find(head,i+1); cout<<p->data;... 网上的实现方法都是删除p的后继结点,我想直接删除p,按照我的想法上述语句应该是正确的,但是执行时候在q->next=p出显示又断点,怎么破 大神救我
  • ,我们知道单向链表是只能单向遍历,题目中只给我们一个p结点,我们是找不到他的前驱的,我们只能删掉他的后继,那么我们想,将p结点与它的后继数据域的值交换一下,删掉后继,是不是变相的删除了p所指结点。...
  • 标题:数据结构:在P结点前插入S结点 在数据结构的习题中偶然看到了一个题目 已知在单链表中P不是首元结点也不是尾元结点,在P结点前插入S结点 #include<stdio.h> #include<malloc.h> typedef ...
  • 数据链表:双向循环链表交换结点

    千次阅读 2019-03-21 17:21:09
    要求:已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change§,交换p所指向的结点和它的前缀结点的顺序。...{//p是双向循环链表中的一个结点,将p所指结点与其...
  • 在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点...若p所指结点的值为x,则删除,并让p移向它的下一结点,否则让pre和p指针同时后移一个结点。 相关代码: void del_x(Linklist *&...
  • 寻找最近共同祖先结点

    千次阅读 2011-03-21 17:38:00
    /* *寻找最近共同祖先结点 *方法1 : 从根开始,查找他的子树中是不是包含两个节点,分别向左右子树递归(层次遍历),知道某一节点找不到两颗子树中的一棵,那么 ... if p所指结点较深 就将p指向它的父结点
  • 二叉树结点的共同祖先问题

    千次阅读 2019-04-29 15:07:55
    假设二叉树采用二叉链表方式存储,root指向根结点,p所指结点和q所指结点为二叉树中的两个不同结点,且互不成为根到该结点的路径上的点,编程求解距离它们最近的共同祖先。 【输入形式】 二叉树的前序和中序遍历...
  • 删除单链表中重复元素(或结点

    千次阅读 2018-10-03 17:06:12
    剔除单链表重复元素(或结点) //剔除单链表重复元素(或结点) void pur_LinkList(LinkList L){ Lnode *p,*s,*q;...next) //固定p所指结点,向后遍历,寻找与之数据域相同的结点 { if...
  • printf("请输入要交换的结点的值:"); DLnode *s; s = new DLnode; scanf("%d", &s->data); DLnode *p; p = L->next; while (p != L) { if (p->data == s->data) //寻找节点 { Change(p); break...
  • p所指结点的值为x,则删除,并让p指向下个结点,否则让pre和p指针同步后移一个结点。解法二: 采用尾插法建立单链表,用p指针扫描L的所有结点,当其值不为x时将其链接到L之后,否则将其释放。我个人的解法更偏向...
  • 2.9 交换双向循环链表的结点p和它的前驱结点 ...写出算法change(p),交换p所指向的结点及其前驱结点的顺序。 交换算法: void Change(LinkList p){ struct DLnode *q; q=p->prior; q->prior->next=
  • 该题目根据条件的不同,使用的方案也不同。 条件一:是二叉搜索树。  方案:这种情况相对来说是最简单的,如果是二叉搜索树,则树里的数据特点比较明显。左边的比根结点小,右边的比根结点大。所以其最低的公共...
  • Offer--056-链表中环的入口结点

    千次阅读 2016-06-07 13:25:50
    CSDN题解:剑Offer–056-链表中环的入口结点 牛客OJ 九度OJ CSDN题解 GitHub代码 056-链表中环的入口结点 未收录 剑Offer–056-链表中环的入口结点 056-链表中环的入口结点 题目描述 一个链
  • 用两个指针,指针p、q最开始都指向 head,p 先向右移动 k 位,然后 p 和 q 再一起同步向右移动,当 p 到达边界时(p指向空), q 正好指向了倒数第 k 个结点 做完这些还不能通过牛客网的测试,因为出现了 k 会大于...
  • Offer--057-删除链表中重复的结点

    千次阅读 2016-06-07 15:41:42
    CSDN题解:剑Offer–057-删除链表中重复的结点 牛客OJ 九度OJ CSDN题解 GitHub代码 057-删除链表中重复的结点 未收录 剑Offer–057-删除链表中重复的结点 057-删除链表中重复的结点 题意题目
  • 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解析:做这道题目给我的感觉是跟链表反转一样,需要考虑节点...
  • 《剑offer》P275 给定结点分为两种情况: 有右子树——则下一个结点是右子树的最左结点。 没有右子树,但是有父节点——则向上找到一个父节点,使得给定节点所在子树,是该父节点的左子树。 若不满足以上两...
  • Offer之链表中倒数第k个结点

    千次阅读 2013-11-20 22:02:58
    输入一个链表,输出该链表中倒数第k个结点。 (hint: 请务必使用链表。) 输入: 输入可能包含多个测试样例,输入以EOF结束。 对于每个测试案例,输入的第一行为两个整数n和k(0 输入的第二行包括n个数t...
  • 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点, 重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5处理后为 1->2->5 代码: class ListNode: def __init__(self, x): self....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,635
精华内容 30,254
关键字:

p所指结点