最近看书看到了这样一个问题:“删除无头单链表中的某个节点”。如果没有“无头”这个前提,那么这个问题应该不算是个问题了吧。这让我想到了一句话,那就是“在企业中塑造不可替代性”,如果一个技能大家都会,那么这绝对不是你的特长,只有这个问题你会,那些人儿不会,那你才牛嘛,所以我们要会就会这种无头单链表的删除操作。可能有些人儿说了,那么这样一写出来,大家不就都会了吗?我个人却不是这样想的,学点东西还怕人知道吗,一个人要想真正有实力,靠的是不断的学习,而不是学点东西怕人知道藏起来(个人观点哦)。作为一个将要走出校门的大三学生,一直在努力提高自身的技能,希望在毕业的时候找到满意的工作。好了,进入正题吧。
问题的具体情况是这样的,该单链表没有头结点,只有一个指针指向此单链表的中间的一个节点(不是第一个结点,也不是最后一个节点),请将该节点从单链表中删除。假设存在一个这样的链表:
A -> B -> C -> D
现在,有一个指针pCurrent指向节点B(要删除的节点),要删除节点B,只需要让节点A->next 指向节点C,这样就完成了删除,但是注意哦,这里的A节点实际上是没有办法获得的,那么该怎么办呢?看到这里,关键的部分就来了,现在让我们来上演一出算法版的“狸猫换太子”,具体做法分为下面几步:
1.B->data = C -> data;
2.B->next = C->next;
3.delete C;
实际上这样完成删除的,令节点B的数据为节点C的数据,然后删除C,这样就一种非常巧妙的方法完成了节点B的删除。
还是给一个代码:
1 void DeleteNode(node *pCurr) 2 { 3 Assert(pCurr != NULL); 4 node * pNext = pCurr->next; 5 if(pNext != NULL) 6 { 7 pCurr->next = pNext->next; 8 pCurr->data = pNex->data; 9 delete pNext; 10 } 11 }
注意代码中的是否为空检查是非常有必要的,这考察了程序员编程风格和思维的缜密程度。最初看到这个“狸猫换太子”算法的时候有点小兴奋哦。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架