我们从上一个赋值中得到了以下代码,用于单向链表,但我们应该添加一个getPrevious()
和setPrevious()
的方法。以下代码适用于单向链表,因为我完成了作业并获得了 100%。
我在网上搜索并阅读了我的书,但找不到解决方案。对于单向链表,我会从头部开始迭代,直到getNext() == current
或类似的东西。显然,这击败了双向链表的目的,所以有什么想法吗?
public class Node
{
private Object item;
private Node next;
public Node()
{
this.next = null;
}
public Node(Object newItem)
{
this.item = newItem;
this.next = null;
}
public Node(Object newItem, Node newNext)
{
this.item = newItem;
this.next = newNext;
}
public Object getItem()
{
return this.item;
}
public void setItem(Object newItem)
{
this.item = newItem;
}
public Node getNext()
{
return this.next;
}
public void setNext(Node newNext)
{
this.next = newNext;
}
}
您只需要添加一个类似于 next
的额外成员,该成员将指向列表中的上一个节点。这样做之后,添加一个吸气手和一个二传手将是微不足道的。
(当然,您需要更改链表的实现以正确填充此新成员。
那么... 问题出在哪里?
Node previous;
public Node getPrevious() {
return previous;
}
public void setPrevious(Node node) {
this.previous = node;
}
如果要使列表成为doubly-linked-list
则必须实现"其他",相反方向的链接。您可以通过为每个节点添加 nother 字段来执行此操作。并且您还必须在每次修改列表时更新字段。