结点专题

剑指offer(C++)--两个链表的第一个公共结点

题目 输入两个链表,找出它们的第一个公共结点。 解法一 两个链表一定有交点的话,方法是指向短链表指针先走完,然后指向长链表,指向长链表指针后走完,指向短链表。所以,第二次走过,一定会在交点相遇。 class Solution {public:ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {ListN

剑指Offer—编程题15(链表中倒数第k个结点)

题目:输入一个链表,输出该链表中倒数第k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6 个结点,从头结点开始它们的值依次是1 、2、3、4、5 、6。这个个链表的倒数第3 个结点是值为4 的结点. public static class ListNode {int value;ListNode next;} 解题思路:

二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度

二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度计算 输入格式:如   abd###ce##f##*   package tree;//二叉树的二叉链表实现import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;import java.util.Sta

LeetCode 671.二叉树第二小的结点

这个题我们可以用数组辅助完成,然后进行排序后,再用再进行取值,这是我的代码块: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/void Preorder_trave(str

spark graphx 可视化:不同属性结点指定不同颜色

普通图: 节点指定颜色的图: 方法: 自定义节点的属性如: 属性文件stylesheets,内容如下,ip节点颜色是红色 edge {    shape: cubic-curve;    fill-color: #dd1c77;    z-index: 0;    text-background-mode: rounded-box;    text-background-color:

在O(1)时间内删除链表结点删除链表中重复节点

题意描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点 解题思路:要求在O(1)时间内删除结点,则可以这样考虑:将给定结点后继结点的值赋给给定结点,然后删除给定结点的后继结点即可 void DeleteNode(ListNode** pHead, ListNode* pToBeDeleted) {if (!pHead || !pToBeDeleted)return;

案例二 树中两个结点的最低公共祖先

问题: 树中两个结点的最低公共祖先.     (1)是一颗二叉树,并且是二叉搜素树(根据二叉搜素树的性质求解)     (2)普通树中结点有指向父结点的指针(演变为两个链表求解第一个公共结点)     (3)一棵普通的树,树中的结点没有指向父结点的指针(最复杂的情况) 通用的解法如下: //记录结点的路径bool GetNodePath(TreeNode*

使用有头结点的链表进行逆置

分别将有头结点的链表和无头结点的链表进行逆置; 有头结点的链表是创建一个为空的表头结点而后跟着第一个结点,创建出一个链表; 无头结点的链表是利用指针,第一个结点就开始进行存储; 两个的共同点就是进行逆置的时候改变每个结点的指针的方向,再将头和尾设置就行了,利用链表进行逆置相比有顺序表而言不用进行每个结点的交换只用改变指针,使得更加方便。 有头结点: #include <std

带表头结点的链表进行栈操作(练习)

#include <stdio.h> #include <stdlib.h> /*定义结构体,用户自定义*/ struct node { int num; struct node * next; }; typedef struct node Node; typedef struct node * Link; enum return_result{

10、链表中倒数第k个结点(含源码)

题目: 链表中倒数第k个结点 描述: 输入一个链表,输出该链表中倒数第k个结点。 <?php/*class ListNode{var $val;var $next = NULL;function __construct($x){$this->val = $x;}}*/function FindKthToTail($head, $k){$count = 0;$node = $head;wh

C++基础语法:指针“进阶“---结点,双重指针

前言        "打牢基础,万事不愁" .C++的基础语法的学习 引入         此前写过两篇和指针有关的帖子,https://mp.csdn.net/mp_blog/creation/editor/135878076 和 https://mp.csdn.net/mp_blog/creation/editor/135775707  在基础知识里,指针内容多而且重要,形式多变

poj.1988并查集-路径压缩、更新结点(偏移量)

题目描述很简单就是有N个盒子,标号分别为1-N,现有两种操作,一种是移动,将包含x的整体方块移到包含y的整体方块的上方,注意是整体移动,另一种为读取操作,输出在x下方方块的个数,那么对于这题感觉就是并查集路径压缩以及更新结点的典型,我们定义一个偏移量代表子节点与根节点的距离,然后定义一个son数组代表x下方的结点的个数,这样用根节点的son--所求结点的偏移量-1 就是x下方的方块数量了:下面是代

[leetcode]删除链表中倒数第k个结点

. - 力扣(LeetCode) class Solution {public:ListNode* trainningPlan(ListNode* head, int cnt) {int n = 0;ListNode* node = nullptr;for (node = head; node; node = node->next) {n++;}for (node = head; n

876. 链表的中间结点-链表

876. 链表的中间结点 - 力扣(LeetCode) 快慢指针 class Solution {public:ListNode* middleNode(ListNode* head) {ListNode* slow = head;ListNode* fast = head;while(fast != nullptr && fast->next != nullptr){slow = sl

链表翻转,写法和交换类似,但是需要pre cur 还有一个临时变量nxt记录下一个结点

递归反转单链表(头插法反转部分链表 要弄pre cur 还有nxt(临时变量保存下一个结点 P0指到需要修改的链表的前一个结点 class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummy=new ListNode(-1,head);ListNode p0=

《剑指offer》刷题笔记(代码完整性):在O(1)时间删除链表结点

《剑指offer》刷题笔记(代码完整性):在O(1)时间删除链表结点 转载请注明作者和出处:http://blog.csdn.net/u011475210代码地址:https://github.com/WordZzzz/CodingInterviewChinese2文章地址:https://github.com/WordZzzz/Note/tree/master/AtOffer刷题平台:ht

链表头部插入结点

Linked List Inserting a node at beginning #include<stdlib.h>//为了用malloc#include<stdio.h>struct node {int data;struct node* next;//在cpp中可以只写 Node *Link;//为了表意明确,Link也经常被命名为next};struct node* head

Leetcode 863.二叉树中所有距离为K的结点

Time: 20190924 Type: Medium 题目描述 给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。 返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。 示例 1: 输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2 输出:

2-链表-51-删除链表的倒数第 N 个结点-LeetCode19

2-链表-51-删除链表的倒数第 N 个结点-LeetCode19 参考:代码随想录 LeetCode: 题目序号19 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note 技术公众号:CodeZeng1998(纯纯技术文) 生活公众号:好锅(Life is more than code) CS

每日一题《leetcode--LCR 021.删除链表的倒数第N个结点》

https://leetcode.cn/problems/SLwz0R/ 这道题我们可以设一个哨兵位,然后把要遍历链表的结点指向该哨兵位。最后用for循环将指针指向要删除结点的前一个。 struct ListNode* removeNthFromEnd(struct ListNode* head, int n){struct ListNode* dummy = mall

树09--二叉树的下一个结点

树09--二叉树的下一个结点-jz57 题目概述解析&参考答案注意事项说明 题目概述 算法说明 给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。测试用例 案例不太容易模拟,建议直接在牛客或者类似 oj 系统上测试。 解析&参考答案 解析 分两种情况: 1)节点有右子树,那么其下一个节点

完全二叉树指向同一层的相邻结点

题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。 答:时间复杂度为O(n),空间复杂度为O(1)。 #include "stdafx.h"#include <iostream>#include <fstream>#includ

3.8 二叉树中结点最大的距离 重建二叉树 顺序遍历二叉树

1. 前言 本文的一些图片, 资料 截取自编程之美 2. 问题描述 3. 问题分析 对于树的相关问题, 递归是非常常见的 对于第一个问题 : 可以通过先递归获取每一个结点的最大左子树的深度, 以及最大右子树的深度, 然后在递归一次获取(node.maxLeft + node.maxRight)的最大值即为所求 对于第二个问题, 因为我们现在有一个先序, 中序的遍历序列, 所

3.6 判断两个无环链表是否相交 找出相交的第一个结点

1. 前言 本文的一些图片, 资料 截取自编程之美 2. 问题描述 3. 问题分析 这两个问题也是非常经典的问题 对于第一个问题 : 解法一 : 穷举, 穷举两个链表的各个元素, 判断有没有相同的结点 解法二 : 遍历一次较长的链表, 然后将其唯一标识存在一个容器ids中, 然后在遍历一次另一个链表, 查找第二个链表中的元素是否存在于ids中, 如果存在, 则说明存在交点

3.4 从无头链表中删除给定的结点 遍历一次逆转链表

1. 前言 本文的一些图片, 资料 截取自编程之美 2. 问题描述 3. 问题分析 第一个问题 : 因为给出的只是一个链表的结点, 来删除当前结点, 所以想要找出当前结点的前一个结点貌似不可能, 所以只有另想一种方法了 这里的方法是 : “狸猫换太子”, 将下一个元素的数据复制到当前结点上面, 然后在删除下一个元素, 已达到”删除当前结点”的目的 第二个问题 : 记录下当前结点

6-4 先序输出度为2的结点

作者 DS课程组 单位 临沂大学 本题要求实现一个函数,按照先序遍历的顺序输出给定二叉树中度为2的结点。 函数接口定义: void PreorderPrintNodes( BiTree T); T是二叉树树根指针,PreorderPrintNodes按照先序遍历的顺序输出给定二叉树T中度为2的结点,格式为一个空格跟着一个字符。 其中BiTree结构定义如下: typede