在现有节点之间插入一个节点

Insert a node in between existing nodes

我有一个插入方法,我需要帮助在两个节点之间插入一个新节点

代码如下:

@Override
public void insert(int index, E data) throws ListOverflowException {
    Node<E> curr = startOfNode;
    int ctr = 0;

    // adds the data in the specified index in the linked list
    for (curr = startOfNode; curr !=null; curr = curr.getNext()) {
        if (ctr == index) {
            Node<E> newNode = new Node<>(data);
            curr.setNext(newNode);
            newNode.setNext(curr.getNext());
            break;
        }
        ctr++;
    }

    if (size == maxSize) {
        throw new ListOverflowException("Error! Can't add any more nodes");
    }
}

这是初始列表:

Item 1 :4
Item 2 :5
Item 3 :6
Item 4 :8
Item 5 :9
Item 6 :null

这是我得到的结果。如您所见,保存编号 8 和 9 的节点丢失了。如何修改循环以获得所需的结果:

Item 1 :4
Item 2 :5
Item 3 :6
Item 4 :7
Item 5 :null

您的第一种方法有缺陷,因为您从要插入的索引中省略了所有节点,因此丢失了所有链接。

在你的第二种方法中你有正确的想法,但是你得到了一个无限循环,因为你在 curr.getNext() after 插入新节点。解决方法是在插入新节点之前获取节点,临时保存,添加新节点并将临时保存的节点设置为插入节点的下一个。

它应该看起来像这样:

Node<E> newNode = new Node<>(data);
Node<E> tempNode = curr.getNext(); // retrieve the initially following node
curr.setNext(newNode);             // insert the new node
newNode.setNext(tempNode);         // reconstruct the link