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

在常量时间内实现单向链表的插入与删除

在常量时间内实现单向链表的插入与删除操作

实现单向链表的插入与删除操作,常规方法是遍历,时间复杂度是\(O(N)\)。我们可以通过改变当前节点的下一个节点来实现单向链表的插入与删除操作,这样时间复杂度就是\(O(1)\)。示意图如下:

在常量时间内单向链表实现插入与删除操作

对于后位插入,我们通常可以忽略,因为这对双向链表与单向链表都很简单。示意图中主要展示前位插入。插入与删除的代码:

iterator insert( iterator itr, const Object & x )
{++theSize;Node * p = itr.current;p->next = new Node{ p->data, p->next };p->data = x;if( itr == end( ) )tail = tail->next;return { p->next };
}
iterator erase( iterator itr )
{--theSize;Node * p = itr.current;Node * d = p->next;p->data = p->next->data;p->next = p->next->next;delete d;return itr;
}

iterator是内置的迭代器。整个操作的重点是副本,灵活运用副本,因为单向链表无法回溯到前一个节点。

http://www.sczhlp.com/news/526.html

相关文章:

  • cpp的单头文件
  • (阶段三:整合)面向用户 面向商户,场景之:shop
  • 现代Web框架的性能基准测试(6084)
  • 服务端推送技术的现代实现(8430)
  • 跨平台Web服务开发的新选择(1992)
  • Astro机器人流畅运动背后的科技原理
  • 实时通信协议的Rust实现(5234)
  • 现代Web框架的性能基准测试(8409)
  • 现代Web服务器性能革命:我的Rust框架探索之旅(1820)
  • 实战项目:文件分块上传系统(4936)
  • HTTP请求处理的高效封装(8307)
  • 实时通信的革命:WebSocket技术的深度探索(1440)
  • Rust生态系统在Web开发中的优势(9219)
  • 高并发处理的Rust实现方案(2866)
  • 从零开始构建高性能实时聊天系统:Hyperlane框架实战指南(5696)
  • 内存使用效率的终极对决:零拷贝技术的实战应用(9040)
  • 推荐6本书《MLIR编译器原理与实践》、《ONNX人工智能技术与开发实践》、《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》
  • 实时通信协议的Rust实现(2554)
  • 零依赖Web框架的设计哲学(5850)
  • 微服务架构的轻量级解决方案(8414)
  • WebSocket服务端的高效处理(1857)
  • 利用数据绑定让动画更智能:在Rive中创建动态黄金计算器
  • 服务器配置的精细化控制(5106)
  • HTTP响应处理的灵活设计(3253)
  • 现代Web框架的性能基准测试(6931)
  • 微服务架构的轻量级解决方案(0378)
  • 实战项目:文件分块上传系统(3902)
  • 并发处理能力的巅峰对决:异步编程的艺术(6216)
  • 跨平台Web服务开发的新选择(9898)
  • WebSocket服务端的高效处理(3038)