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