面临使用链表数据结构的插入方法的问题


public void insertBefore(T e) {
if(empty())
{
insert(e);
}
else
{
if(head == current)
{
current.next = new Node<T>(current.data);
current.data = e;
}
else
{
Node<T> oldCurrent = current;
Node<T> newNode = new Node<T>(e);
current = head;
while(current != oldCurrent)
current = current.next;
newNode.next = oldCurrent;
current.next = newNode;
current = current.next;
}
}
}

insertBefore(T e(:要求:列表 L 未满。 输入:e。 结果:一个新节点 在列表中创建并插入包含元素 E 之前。 新元素 e 成为当前元素。如果列表为空,则在 开头,也做了头部元素。输出:无

insert(( 方法提示

public void insert(T e) {
Node<T> tmp;
if (empty()) {
current = head = new Node<T> (e);
}
else {
tmp = current.next;
current.next = new Node<T> (e);
current = current.next;
current.next = tmp;
}

}

我正在作为实施者实现此方法 类链表有两个节点,一个当前节点和一个头,当我们插入一个节点时,当前移动到添加到列表中的最新节点。并且方法检索返回当前节点中的当前数据 我的问题是当我在我的主目录中键入以下内容时,我可以测试此方法的链表实现时,我没有得到我想要的方法的结果,所以

l.insert(2);
l.insert(3);
l.insert(4);
l.insertBefore(5);
l.findFirst();
for(int i = 0;  i < 4 ; i++)
{
System.out.print(l.retrieve());
l.findNext();
}

我的测试结果:2345 预期结果 : 2354

如果current != head,您应该找到当前节点的前一个节点,而不是当前节点本身。 像这样:

Node<T> prev = head;
while (prev.next != current) {
prev = prev.next;
}
prev.next = new Node<T>(e);
prev.next.next = current;

最新更新