自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 数据结构 删除链表的中间结点

思路与算法由于链表不支持随机访问,因此常见的找出链表中间节点的方法是使用快慢指针:即我们使用两个指针 \textit{fast}fast 和 \textit{slow}slow 对链表进行遍历,其中快指针 \textit{fast}fast 每次遍历两个元素,慢指针 \textit{slow}slow 每次遍历一个元素。这样在快指针遍历完链表时,慢指针就恰好在链表的中间位置。在本题中,我们还需要删除链表的中间节点,因此除了慢指针 \textit{slow}slow 外,我们再使用一个指针 \te..

2022-05-30 08:38:59 573

原创 数据结构 环路检测

给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。思路与算法一个非常直观的思路是:我们遍历链表中的每个节点,并将它记录下来;一旦遇到了此前遍历过的节点,就可以判

2022-05-25 10:19:33 231

原创 【刷题】链表中的下一个更大节点

解题思路 逆置链表 通过栈来进行操作 不需要额外开辟动态链表class Solution { int len=0; ListNode* reverseList(ListNode* head) { ListNode*dummy=nullptr; ListNode*curr=head; while(curr!=nullptr) { ListNode*next...

2022-05-23 08:25:41 129

原创 【数据结构】链表

实现链表的 初始化 插入 以及相关的笔试题头文件#pragma oncetypedef int ElemType;typedef struct ListNode;typedef struct ListNode{ ElemType data; struct ListNode* next;}ListNode, * LinkList;// 购买结点ListNode* Buynode();//释放空间void Freenode(ListNode* p);//初始化单链表Li

2022-05-10 10:58:35 109

原创 【C++】完美转发

forward完美转发是指在函数模板中,完全依照模板参数的类型,将参数传递给函数模板中调用的另一个函数。模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力,但是引用类型的唯一作用就是限制了接收的类型,后续使用中都退化成了左值,我们希望能够在传递(转发)过程中保持它的左值或者右值的属性, 即执行例二后输出右值。目的: 数据是左值就转发成左值,右值就转发成右值。自动的识别类型void func2(int&& val) { cout << "右值" ..

2022-05-10 10:25:35 214

原创 【Linux】编译链接

1.gcc 分步编译链接 (1) 预编译 : gcc -E main.c -o main.i (2) 编译: gcc -S main.i -o main.s (3) 汇编: gcc -c main.s -o main.o (4) 链接: gcc main.o -o main2.编译链接过程2.1 预编译阶段a) 删除所有的“#define”,并且展开所有的宏定义; b) 处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等; c

2022-05-09 08:12:55 129

原创 简单实现string类

源码:#include<iostream>using namespace std;class String{private: char* _str;//指向字符串的指针 size_t size;//保存当前字符串长度public: //构造函数 String(const char* str = "") { if (str == NULL) { _str = new char[1];//为了与delete[]配合使用 *_str = '\0';

2022-04-26 13:22:49 1476

原创 自底向上的归并排序

class Solution {public: ListNode* sortList(ListNode* head) { if (head == nullptr)return head; //记录链表的总长,便于从下往上归并计算 int length = 0; ListNode *node = head; while (node != nullptr) { le...

2022-04-26 11:29:12 233

原创 链表的头插

给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。插入排序 算法的步骤:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时,从输入数据中删除一个元素(红色),并就地插入已排序的列表中。对链表进行插入排序。

2022-04-24 15:47:29 216

原创 重排链表 刷题

力扣刷题方法一 放入容器vector 然后访问下标去进行编写class Solution {public: void reorderList(ListNode* head) { if (head == nullptr) { return; } vector<ListNode*> vec; ListNode* node = head; whil...

2022-04-24 11:25:15 56

原创 盛最多水的容器

题目说明:盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例..

2022-04-24 10:16:23 51

原创 判断链表是否有环

力扣刷题:给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其..

2022-04-22 10:52:30 1107

原创 浅谈const在C语言和C++的区别

在很多的人的普遍印象中,用const修饰符修饰的变量表示该变量是常量,是只读的,无法修改的。其实对于这样的回答,是不准确的。在C语言中的const在C语言中,用const修饰的变量,其本质上还是个变量,只是它不允许作为左值存在,也就是不法对该变量进行直接赋值修改该变量,但是这不意味着该变量的值就无法修改。下面我们看一下这段代码:#include<stdio.h>int main(){ const int a = 10; int b = 10; int..

2022-04-20 20:41:40 956

原创 旋转链表算法

给你一个链表的头节点head,旋转链表,将链表每个节点向右移动k个位置。分析记给定链表的长度为 n,注意到当向右移动的次数 k ≥n 时,我们仅需要向右移动 k mod n次即可。因为每 nn次移动都会让链表变为原状。这样我们可以知道,新链表的最后一个节点为原链表的第 (n - 1) - ( k mod n) 个节点(从 0开始计数)。将给定的链表链接成环 进行处理1.首先计算出链表的长度 n,并找到该链表的末尾节点,将其与头节点相连。得到了闭合为环的链表。2.找到新链表...

2022-01-15 18:20:06 79

原创 测试冒泡算法优化后的效率对比

#include <stdio.h>#include <stdlib.h>#include <time.h># include <assert.h>//冒泡排序void BubbleSort1(int* arr, int len){ int tmp; for (int i = 0; i < len - 1; i++) { for (int j = 0; j + 1 < len - i; j++) { if (ar.

2021-05-17 12:48:39 73

原创 统计数字位数、顺序输出、逆序输出各位数字

#include<stdio.h>#include<math.h>int Digits(int n) //统计整数位数{ if(n==0) return 1; int count=0; while(n!=0) { n/=10; count++; } return count;}void Order(int n) //顺序输出数字{ if(n==0).

2021-05-07 21:51:48 99

原创 写一个交换a,b的函数 所需要的条件

写一个交换函数 错误示例与正确做法错误代码一void Swap_err1(int a,int b) int tmp = a; a = b; b = tmp; //printf("%d,%d\n",a,b);}没有传指针错误代码二void Swap_err2(int *p1,int *p2){ int *tmp = p1; p1 = p2; p2 = tmp;}没有解引用错误代码三void Swap_err3(int *p1,int *p2){ .

2021-05-07 21:37:57 64

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除