我知道在实现双链表时可以添加指针,这是一种节省空间的技术。我一直在尝试实现该数据结构。我不完全确定你如何能够添加指针。标准双向链表的代码如下所示:
class DLink<E>
{
private E element; // Value for this node
private DLink<E> next; // Pointer to next node in list
private DLink<E> prev; // Pointer to previous node
/** Constructors */
DLink(E it, DLink<E> p, DLink<E> n)
{
element = it;
prev = p;
next = n;
}
DLink(DLink<E> p, DLink<E> n)
{
prev = p;
next = n;
}
/** Get and set methods for the data members */
DLink<E> next()
{
return next;
}
DLink<E> setNext(DLink<E> nextval)
{
return next = nextval;
}
DLink<E> prev()
{
return prev;
}
DLink<E> setPrev(DLink<E> prevval)
{
return prev = prevval;
}
E element()
{
return element;
}
E setElement(E it)
{
return element = it;
}
}
以下是我在线阅读的内容。
&#34;有一种节省空间的技术可以用来消除额外的空间需求,尽管它会使实现变得复杂并且速度稍慢。因此,这是空间/时间权衡的一个例子。它基于观察,如果我们存储两个值的总和,那么我们可以通过减去另一个来获得任一值。当然,要从存储的求和中恢复其中一个值,必须提供另一个值。指向列表中第一个节点的指针以及其两个链接字段之一的值将允许按顺序访问列表中的所有剩余节点。这是因为指向节点的指针必须与下一个节点的prev指针的值相同,以及前一个节点的下一个指针。可以向下移动列表,拆分相加的链接字段,就像打开拉链一样。&#34; 资料来源:http://algoviz.org/OpenDSA/Books/OpenDSA/html/ListDouble.html