数据结构和算法
数据结构和算法
attempt_to_do
这个作者很懒,什么都没留下…
展开
-
反转链表整个链表以及部分链表(递归)
反转整个链表#include <bits/stdc++.h>struct ListNode{ int val; struct ListNode *next; ListNode(int x) : val(x), next(nullptr) { }};class Solution{public: //以head为起点,反转链表,并返回头节点 ListNode *ReverseList(ListNode *pHead)原创 2022-01-23 11:36:50 · 588 阅读 · 0 评论 -
二叉搜索树(验证合法性以及增删查改)
验证二叉搜索树#include <bits/stdc++.h>using namespace std;struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}原创 2022-01-04 14:18:26 · 97 阅读 · 0 评论 -
将二叉树转成单链表(c++&&goalng)
struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x),原创 2021-12-28 17:05:44 · 541 阅读 · 0 评论 -
填充二叉树节点的右侧指针(c++&&golang)
/*给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。*/// Definition for a Node.class Node{原创 2021-12-28 15:18:27 · 473 阅读 · 0 评论 -
翻转二叉树(c++&&golang)
#include <bits/stdc++.h>using namespace std;struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNo原创 2021-12-28 14:55:26 · 99 阅读 · 0 评论 -
c++实现二叉树的4种遍历(递归和非递归)
二叉树的遍历(traversing bianry tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。1)前序遍历:规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树----------------------递归思想2)中序遍历:规则是若树为空,则空操作返回,否则从根结点开始(仅仅是开始,先不访问该结点),中序遍历根结点的左子树,然后是访问根结点(访问),最后中序遍历右子树--------------------原创 2021-11-24 14:42:55 · 631 阅读 · 0 评论 -
删除链表中重复的结点(c++&&go)
/*在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5*/#include <bits/stdc++.h>struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NUL原创 2021-11-22 09:20:30 · 501 阅读 · 0 评论 -
两个链表的第一个公共结点(c++&&go)
/* 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) */#include <bits/stdc++.h>struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};class Solution {public: /原创 2021-11-22 09:19:43 · 106 阅读 · 0 评论 -
链表中倒数最后k个结点(c++&&go)
/*输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。*/#include <bits/stdc++.h>struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(nullptr) {}};class Solution {public: /** * 代码中的类名、方法名、原创 2021-11-22 09:18:49 · 369 阅读 · 0 评论 -
合并两个排序的链表(c++&&go)
/* 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 */#include <bits/stdc++.h>struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};//非递归/* class Solution {public: ListNode* Merge(ListNode* pHe原创 2021-11-22 09:17:24 · 534 阅读 · 0 评论 -
复杂链表的复制(c++&&go)
/*输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。*/struct RandomListNode { int label; struct RandomL原创 2021-11-22 09:16:10 · 94 阅读 · 0 评论 -
反转链表(c++&&go)
/*给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。*/#include <bits/stdc++.h>struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(nullptr) { }};class Solution {public: ListNode* ReverseList(ListNode* pHead) {原创 2021-11-19 14:38:24 · 449 阅读 · 0 评论 -
从尾到头打印链表(c++&&go)
cpp/*输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。*/#include <bits/stdc++.h>#include <vector>using namespace std;struct ListNode{ int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};class Solution原创 2021-11-19 14:34:06 · 876 阅读 · 0 评论 -
链表中环的入口结点(c++ &&go)
cpp/*给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。*/#include <bits/stdc++.h>struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};//哈希表/* class Solution {public: ListNode* Entr原创 2021-11-19 14:31:33 · 759 阅读 · 0 评论 -
五大算法 - 递归算法
1.什么是递归递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递:将递归问题分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决归:当你将问题不断缩小规模递去的时候,必须有一个明确的结束递去的临界点(递归出口),一旦达到这个临界点即就从该点原路返回到原点,最终问题得到解决。1.1.递归过程1.2.运用递归的场景具有以下特征的问题可考虑递归求解:当问题和子问题具有递推关系,比如杨辉三角、计算阶乘。具有递归性质的数据结构,比如链表原创 2021-10-14 15:07:09 · 1291 阅读 · 0 评论