我的创作纪念日——《惊变128天》

我的创作纪念日——《惊变128天》

    • 机缘
    • 收获
    • 日常
    • 成就
    • 憧憬


在这里插入图片描述


机缘

时光飞逝,转眼间,我已在这条创作之路上走过了 128 天。回顾起 2024 年 8 月 29 日,我满怀忐忑与期待,撰写了第一篇技术博客《讲解LeetCode第1题:两数之和(完整代码)》。彼时,我未曾想到,这平凡的一天,会成为我创作旅程的起点,赋予我如此多的意义与价值。

回想起最初成为创作者的初心,源自于对技术探索的热情与分享的欲望。彼时,我在技术的海洋里奋力遨游,接触到诸多复杂难题,每一次攻克后的喜悦都如璀璨星辰照亮我前行的方向。然而,随着学习的深入,愈发感觉知识如浩瀚宇宙,无边无际。我意识到,若想真正将所学内化,将经验沉淀,创作技术博客是不二之选。它既能帮我系统梳理知识脉络,又能为同行们提供参考,搭建起一座知识共享的桥梁。就像《讲解 LeetCode 第 1 题:两数之和 (完整代码)》,那是我学习路上的一个小小里程碑,我希望通过记录解题过程,不仅让自己加深理解,更能让遇到同样困惑的朋友少走弯路,于是开启了这段创作旅程。


收获

在创作的这128天里,我收获了诸多宝贵的财富。首先,我的粉丝数量稳步增长,从最初的寥寥数人到如今我开始写这篇博客时已经获得了300名粉丝了,这让我感到非常欣慰。其次,我的文章也获得了大量的正向反馈,无论是点赞、评论还是阅读量,都见证了我的努力与成长,这些反馈不仅是对我内容的认可,更是我继续创作的动力源泉。更重要的是,我通过文章结识了许多志同道合的领域同行。

同时,我的技术确实也获得了巨大的成长。从最初对技术知识的懵懂,到如今我对各种算法和编程知识有了更深层次的理解;从对文章结构的生疏,到能够清晰地组织思路、条理分明地阐述观点。每一次创作,都是一次自我挑战与突破。例如:为了使博客更加的美观清晰,我系统的学习了轻量型的标记语言Markdown;为了使讲解的算法题更直观易懂,我又学习了如何去作图。


日常

创作已然融入我的生活,成为不可或缺的一部分。在忙碌的学习间隙中,它是我心灵的栖息地。当然,创作的过程并非一帆风顺。有时面临考试备考很少有时间写博客,但对技术的热爱和分享的热情驱使我在深夜仍坚持敲击键盘,将自己的所学所思记录下来。

我也有过疲惫不堪而短暂停笔的时刻,可内心深处总有个声音提醒我不要忘记这份初心。我深知精力有限,所以学习巧妙平衡。白天利用通勤路上碎片化时间构思文章框架,晚上时整理资料,编写文章。如此一来,创作不仅未与学习冲突,反而相辅相成,学习中的知识为创作提供鲜活素材,创作过程中的知识梳理又助力学习难题迎刃而解,学习也因持续输出而更加扎实深入。


成就

在过去的日子里,我写过许多代码,但最让我自豪的是博客 单向链表的基本操作【下】(多种方法+测试代码+图像展示)中的代码。这篇博客里的代码是由我花费数天,通过不断的调试、修改,再调试、再修改而得到的最终精简版,同时这篇博客也是我的呕心沥血之作。

以下是我从这篇博客中精选的其中一段代码:

//单向链表节点的“插入+删除+查找+求表长”操作汇总小程序
#include<iostream>
using namespace std;

struct ListNode
{
	int data;
	ListNode* next;
	ListNode(int val) :data(val), next(nullptr) {}
};

class LinkList
{
public:
	//显示基本操作菜单界面
	void menuList()
	{
		cout << "*********************单向链表的基本操作**********************" << endl;
		cout << "--------------------1.插入单向链表的节点---------------------" << endl;
		cout << "--------------------2.按位删除单向链表的节点------------------" << endl;
		cout << "--------------------3.按值删除单向链表的节点------------------" << endl;
		cout << "--------------------4.由位查找单向链表的节点------------------" << endl;
		cout << "--------------------5.由值查找单向链表的节点------------------" << endl;
		cout << "--------------------6.求长单向链表--------------------------" << endl;
		cout << "--------------------0.退出该小程序--------------------------" << endl;
		cout << "**********************************************************" << endl;
	}

	//单向链表节点的插入——任意插
	ListNode* insertListNode(ListNode*& head, int position, int value)
	{
		int currSite = 1;
		ListNode* curr = head;

		if (position == 1)
		{
			ListNode* newNode = new ListNode(value);
			newNode->next = head;
			head = newNode;

			return head;
		}
		else
		{
			while (curr != nullptr && currSite < position - 1)
			{
				curr = curr->next;
				currSite++;
			}

			if (curr == nullptr || position < 0)
			{
				return nullptr;
			}
			else
			{
				ListNode* newNode = new ListNode(value);
				newNode->next = curr->next;
				curr->next = newNode;

				return head;
			}
		}
	}

	//单向链表节点的删除——按位删除-迭代法(带哑节点的形式)
	ListNode* deleteListNode_P(ListNode*& head, int position)
	{
		int currSite = 1;
		ListNode* dummy = new ListNode(-1);
		ListNode* curr = dummy;
		dummy->next = head;

		if (position <= 0)
		{
			return nullptr;
		}
		else
		{
			while (curr->next != nullptr && currSite < position)
			{
				curr = curr->next;
				currSite++;
			}

			if (curr->next == nullptr)
			{
				return nullptr;
			}
			else
			{
				ListNode* delNode = curr->next;
				curr->next = curr->next->next;
				delete delNode;
			}

			head = dummy->next;
			delete dummy;
			return head;
		}
	}

	//单向链表节点的删除——按值删除-迭代法
	ListNode* deleteListNode_V(ListNode*& head, int value)
	{
		ListNode* dummy = new ListNode(-1);
		dummy->next = head;
		ListNode* curr = dummy;

		while (curr->next != nullptr)
		{
			if (curr->next->data != value)
			{
				curr = curr->next;
			}
			else
			{
				ListNode* temp = curr->next;
				curr->next = curr->next->next;
				delete temp;
			}
		}

		head = dummy->next;
		delete dummy;
		return head;
	}

	//单向链表节点的查找——由位查值-迭代法
	void findListNode_P(ListNode* head, int position)
	{
		int currSite = 1;
		ListNode* curr = head;

		if (head == nullptr || position <= 0)
		{
			return;
		}

		while (curr != nullptr && currSite < position)
		{
			curr = curr->next;
			currSite++;
		}
		if (curr == nullptr)
		{
			return;
		}
		else
		{
			cout << "位置" << position << "上的节点的值为:" << curr->data << endl;
			return;
		}
	}

	//单向链表节点的查找——由值查位-迭代法
	void findListNode_V(ListNode* head, int value)
	{
		int currSite = 1;
		ListNode* curr = head;

		while (curr != nullptr)
		{
			if (curr->data == value)
			{
				cout << "值为" << value << "的节点所在的位置为:" << currSite << endl;
			}

			curr = curr->next;
			currSite++;
		}
	}

	//单向链表的求长——迭代法
	void lengthList(ListNode* head)
	{
		int length = 0;
		ListNode* curr = head;

		if (head == nullptr)
		{
			cout << "该单向链表的长度为:" << length << endl;
			return;
		}

		while (curr != nullptr)
		{
			curr = curr->next;
			length++;
		}
		cout << "该单向链表的长度为:" << length << endl;
		return;
	}

	//单向链表的打印——迭代
	void printList(ListNode* head)
	{
		ListNode* curr = head;
		while (curr != nullptr)
		{
			cout << curr->data << " ";
			curr = curr->next;
		}
		cout << endl;
	}
};

int main()
{
	LinkList list;

	//单向链表的创建
	ListNode* head = new ListNode(3);
	head->next = new ListNode(2);
	head->next->next = new ListNode(1);
	head->next->next->next = new ListNode(3);
    
	int n = INT_MAX;
	while (n != 0)
	{
		cout << "现在的单向链表为:" << endl;
		list.printList(head);

		list.menuList();
		cout << "请输入菜单号" << endl;
		cin >> n;

		int position, value;
		switch (n)
		{
		case 1:
			//单向链表节点的插入
			//int position, value;
			cout << "请输入你要插入的节点的位置" << endl;
			cin >> position;
			cout << "请输入你要插入的节点的值" << endl;
			cin >> value;

			cout << "已在位置" << position << "上插入值为" << value << "的节点" << endl;
			list.insertListNode(head, position, value);

			break;
		case 2:
			//单向链表节点的删除
			//int position;
			cout << "请输入你要删除的节点的位置" << endl;
			cin >> position;

			cout << "已将位置" << position << "上的节点删除" << endl;
			list.deleteListNode_P(head, position);

			break;
		case 3:
			//单向链表节点的删除
			//int value;
			cout << "请输入你要删除的节点的值" << endl;
			cin >> value;

			cout << "已将值为" << value << "的节点删除" << endl;
			list.deleteListNode_V(head, value);

			break;
		case 4:
			//单向链表节点的查找
			//int position;
			cout << "请输入你要查找的位置" << endl;
			cin >> position;

			list.findListNode_P(head, position);

			break;

		case 5:
			//单向链表节点的查找
			//int value;
			cout << "请输入你要查找的节点的值" << endl;
			cin >> value;

			list.findListNode_V(head, value);

			break;
		case 6:
			///单向链表的求长
			list.lengthList(head);

			break;
		}
	}
	return 0;
}

这段代码是单向链表节点的“插入+删除+查找+求表长”操作的汇总小程序。每当我回顾这段代码,我都会想起当时自己初次接触单向链表时的那份好奇与困惑。

从最初的无法理解节点间的指针关系,到后来能够熟练地实现插入、删除、查找和求表长等操作,每一步都凝聚了我的汗水与努力。这段代码不仅见证了我的技术成长,更成为了我面对挑战、不懈探索的宝贵记忆。如今,每当我再次审视它,都会涌起一股自豪与感激之情,它是我技术旅程中一个重要的里程碑。


憧憬

未来,我希望能够在技术领域继续深耕,不断提升自己的专业能力。在职业上,我希望能够成为一名优秀的软件开发工程师,不仅掌握各种编程语言与技术框架,还能在算法设计与系统架构方面有所建树。在创作上,我将继续坚持分享有价值的技术文章,不仅涵盖C/C++、算法与数据结构等核心技术领域,还将涉及操作系统和计算机网络等方向。

最后,感谢CSDN的鼓励与支持,也感谢每一位读者的陪伴与反馈。未来的路还很长,我会继续努力,不忘初心,砥砺前行!


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

医学图像分析工具02:3D Slicer || 医学影像可视化与分析工具 支持第三方插件

3D Slicer 是一款功能全面的开源医学影像分析软件&#xff0c;广泛应用于影像处理、三维建模、影像配准和手术规划等领域。它支持多种医学影像格式&#xff08;如 DICOM、NIfTI&#xff09;和丰富的插件扩展&#xff0c;是神经科学、放射学和生物医学研究中不可或缺的工具。 在…

【每日学点鸿蒙知识】Hap 安装失败、ArkTS 与C++ 数组转换、渐变遮罩效果等

1、在启动调试或运行应用/服务时&#xff0c;安装HAP出现错误&#xff0c;提示“error: install failed due to older sdk version in the device”错误信息。 这是由于编译打包所使用的SDK版本与设备镜像版本不匹配。不匹配的场景包括&#xff1a; 场景一&#xff1a;设备上…

分布式搜索引擎之elasticsearch基本使用3

分布式搜索引擎之elasticsearch基本使用3 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&…

在macOS上安装MySQL

macOS的MySQL有多种不同的形式&#xff1a; 1、本机包安装程序&#xff0c;它使用本机macOS安装程序&#xff08;DMG&#xff09;引导您完成MySQL的安装。有关详细信息&#xff0c;请参阅第2.4.2节&#xff0c;“使用本机包在macOS上安装MySQL”。您可以将包安装程序与macOS一…

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

漏洞简介 pache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 漏洞环境 vulhub/httpd/CVE-2…

jenkins入门4 --window执行execute shell

1、启动关闭jenkins 在Windows环境下&#xff0c;如果你需要关闭Jenkins服务&#xff0c;可以通过以下几种方式&#xff1a; 1、使用Windows服务管理器&#xff1a; 打开“运行”对话框&#xff08;Win R&#xff09;&#xff0c;输入services.msc&#xff0c;然后回车。 在服…

conda安装及demo:SadTalker实现图片+音频生成高质量视频

1.安装conda 下载各个版本地址&#xff1a;https://repo.anaconda.com/archive/ win10版本&#xff1a; Anaconda3-2023.03-1-Windows-x86_64 linux版本&#xff1a; Anaconda3-2023.03-1-Linux-x86_64 Windows安装 环境变量 conda -V2.配置conda镜像源 安装pip conda…

医学图像分析工具01:FreeSurfer || Recon -all 全流程MRI皮质表面重建

FreeSurfer是什么 FreeSurfer 是一个功能强大的神经影像学分析软件包&#xff0c;广泛用于处理和可视化大脑的横断面和纵向研究数据。该软件由马萨诸塞州总医院的Martinos生物医学成像中心的计算神经影像实验室开发&#xff0c;旨在为神经科学研究人员提供一个高效、精确的数据…

vite打包报错“default“ is not exported by “node_modules/dayjs/dayjs.min.js“

vite打包最开始报的错是&#xff1a; 查找各种解决办法后&#xff0c;第一次尝试如下&#xff1a; npm i rollup/plugin-commonjs npm i vite-plugin-require-transform但继续报错&#xff1a; 最后解决办法为&#xff1a; 忽略掉node_modules 在vite.config.ts里修改代码 …

医院管理住院系统的研究与实现

第三章 系统的需求分析和可行性研究 3.1 功能需求 经过对本系统的研究分析&#xff0c;本系统主要是为了方便让医院更快捷的管理。所面向的对象主要有病人、医生和医院的管理人员。病人运用该系统后&#xff0c;可以根据该系统查看自己所需要的信息&#xff0c;包括治疗自己…

安徽省地图arcgis数据美化后mxd文件shp格式下载后内容测评

标题中的“安徽省地图arcgis数据美化后mxd文件shp格式”揭示了这个压缩包的内容是经过GIS处理的、针对安徽省地图数据。ArcGIS是一款由Esri公司开发的专业地理信息系统软件&#xff0c;用于处理、分析和展示地理空间数据。MXD文件是ArcGIS的项目文件&#xff0c;包含了地图布局…

GitLab创建用户,设置访问SSH Key

继上一篇 Linux Red Hat 7.9 Server安装GitLab-CSDN博客 安装好gitlab&#xff0c;启用管理员root账号后&#xff0c;开始创建用户账户 1、创建用户账户 进入管理后台页面 点击 New User 输入用户名、邮箱等必填信息和登录密码 密码最小的8位&#xff0c;不然会不通过 拉到…

计算机网络--根据IP地址和路由表计算下一跳

一、必备知识 1.无分类地址IPV4地址网络前缀主机号 2.每个IPV4地址由32位二进制数组成 3. /15这个地址表示网络前缀有15位&#xff0c;那么主机号32-1517位。 4.地址掩码&#xff08;子网掩码&#xff09;&#xff1a;所对应的网络前缀为1&#xff0c;主机号为0。 5.计算下…

重新整理机器学习和神经网络框架

本篇重新梳理了人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、神经网络&#xff08;NN&#xff09;和深度学习&#xff08;DL&#xff09;之间存在一定的包含关系&#xff0c;以下是它们的关系及各自内容,以及人工智能领域中深度学习分支对比整理。…

Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?

如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中&#xff1f; 在使用 Element UI 的 Table 组件时&#xff0c;如果你想要禁用某一行的选中&#xff08;特别是在多选模式下&#xff09;&#xff0c;可以通过自定义行的 selectable 属性来实现。selectable …

WebRtc02:WebRtc架构、目录结构、运行机制

整体架构 WebRtc主要分为三层&#xff1a; CAPI层&#xff1a;外层调用Session管理核心层&#xff1a;包括视频引擎、音频引擎、网络传输 可由使用者重写视频引擎&#xff1a;编解码器、视频缓存、视频增强音频引擎&#xff1a;编解码器、音频缓存、回音消除、降噪传输&#x…

资源分享:gpts、kaggle、paperswithcode

gpts 似乎是gpt agent集合&#xff0c;专注于不同细分方向的ai助手。 kaggle 专注于AI相关的培训、竞赛、数据集、大模型。 paperswithcode 简单直接&#xff0c;内容如同网站地址&#xff0c;直接提供优秀代码和配套的论文&#xff0c;似乎还有数据集。

Linux-Ubuntu之裸机驱动最后一弹PWM控制显示亮度

Linux-Ubuntu之裸机驱动最后一弹PWM控制显示亮度 一&#xff0c; PWM实现原理二&#xff0c;软件实现三&#xff0c;正点原子裸机开发总结 一&#xff0c; PWM实现原理 PWM和学习51时候基本上一致&#xff0c;控制频率&#xff08;周期&#xff09;和占空比&#xff0c;51实验…

Java 性能监控工具详解:JConsole、VisualVM 和 Java Mission Control

在 Java 应用程序的开发和维护过程中&#xff0c;性能监控和故障诊断是至关重要的。本文将详细介绍三款常用的 Java 性能监控工具&#xff1a;JConsole、VisualVM 和 Java Mission Control&#xff08;JMC&#xff09;&#xff0c;并探讨它们的功能和使用方法。 1 JConsole 1…

一款好用的书签管理工具

多平台同步&#xff1a;可以在网页端、手机&#xff08;iOS 和 Android&#xff09;端同步使用。无论你是在电脑上浏览网页添加书签&#xff0c;还是在外出时使用手机&#xff0c;都能方便地访问和管理书签。例如&#xff0c;你在办公室电脑上收藏了一篇关于行业研究的网页&…