当前位置: 首页 > article >正文

我的创作纪念日——《惊变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的鼓励与支持,也感谢每一位读者的陪伴与反馈。未来的路还很长,我会继续努力,不忘初心,砥砺前行!


在这里插入图片描述


http://www.kler.cn/a/469386.html

相关文章:

  • 【银河麒麟高级服务器操作系统实例】tcp半链接数溢出分析及处理全过程
  • 安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装
  • Linux安全防火墙(iptables)配置策略
  • github开源链游详细搭建文档
  • 深入了解 ES6 Map:用法与实践
  • 后台运行 Python
  • webapi+vue3实现前后端图片传输
  • python pyqt5+designer的信号槽和动态显示
  • ArcGIS Server 10.2授权文件过期处理
  • C语言基础学习笔记(持续更新~)
  • JVM实战—8.如何分析jstat统计来定位GC
  • 云打印之菜鸟打印组件交互协议
  • 记录学习《手动学习深度学习》这本书的笔记(七)
  • Unity的四种数据持久化方式
  • unity学习9:unity的Asset 导入和导出
  • Go语言的 的设计模式(Design Patterns)基础知识
  • 富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)
  • 【大模型】7 天 AI 大模型学习
  • 『SQLite』表的创建、修改和删除
  • Centos中常见的几个问题及其解决办法
  • 【微服务】SpringBoot 国际化适配方案使用详解
  • 陪诊陪护助浴系统源码:JAVA养老护理助浴陪诊小程序医院陪护陪诊小程序APP源码
  • 安卓漏洞学习(十六):unicorn在逆向中的使用
  • CESS 的 2024:赋能 AI,塑造去中心化数据基础
  • 基于springboot的社区团购系统设计(源码+数据库+文档)
  • Ungoogled Chromium127 编译指南 MacOS篇(三)- 安装Xcode