20120918-双向链表类定义《数据结构与算法分析》
将新的节点插入双向链表的时候:
iterator insert(iterator itr,const Object & x)//向双向链表中插入一个x节点 { Node *p = itr.current; theSize++; return iterator(p->prev = p->prev->next = new Node(x,p->prev,p)); }
LIST类的删除节点的过程:
//删除双向链表中的一个节点 iterator erase(iterator itr) { Node *p = itr.current; iterator retVal(p->next); p->prev->next=p->next; p->next->prev=p->prev; delete p; theSize--; return retVal; } iterator erase(iterator start,iterator end) { for(iterator itr = from;itr != to; ) itr = erase(itr); return to; }
传递给erase insert的迭代器可能没有初始化 或者 这个迭代器是错误的表达,因此需要一个检测:
protected: const List<Object> *theList; Node *current; const_iterator(const List<Object> & lst,Node *p): theList(&lst),current(p)' { } void assertIsValid() const { if(theList == NULL || current == NULL || current == theList->head) throw IteratorOutOfBoundsException(); }
带有附加错误检测的insert类:
iterator insert(iterator itr.const Object & x) { itr.assertIsValid(); if(itr.theList !=this) throw IteratorMismatchException(); Node *p = itr.current; theSize++; return iterator(*this,p->prev=p->prev->next=new Node (x,p->prev,p)); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?