【问题标题】:Implementing Popback in constant time in a singly linked list在单链表中以恒定时间实现 Popback
【发布时间】:2014-01-27 21:17:56
【问题描述】:

我想知道是否有可能(std::list 似乎应该这样做)在恒定时间内在单链表上实现 PopBack() 操作以及如何实现?

我假设我们存储头和尾指针。在这种情况下,PushBack()、PushFront()、PopFront() 可以很容易地在恒定时间内实现。但是想不出在运行时间相同的情况下实现PopBack()的方法。

【问题讨论】:

  • std::list 是双重链接的。单链接的std::forward_list 没有pop_back 方法。

标签: c++ data-structures linked-list singly-linked-list


【解决方案1】:

您不能在恒定时间内为单个链表实现pop_back。为此,您需要知道最后一个元素之前的前一个元素应包含对前一个元素的引用。如果是这样,那么您将拥有一个双链表。

您可以在固定时间内实现push_back。我对 C++ 标准的建议之一是引入std::x_forward_list,它将支持push_back 成员函数。在这种情况下,您将能够使用这样的单链表来模拟队列。

【讨论】:

  • Aaah....当然,std::list 肯定是这样。现在看起来像个愚蠢的问题...我该睡觉了,这里的印度是凌晨 3:00!
  • 如果这个操作会被实现,那么容器就会有双向迭代器。但是单链表不能有双向迭代器。
猜你喜欢
  • 2013-11-04
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多