使用链表数据结构的insertBefore方法遇到问题

时间:2018-10-02 22:26:17

标签: java methods data-structures

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成为当前元素。如果列表为空,则在处插入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

1 个答案:

答案 0 :(得分:1)

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

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