LinkedList 在节点后插入

Pat*_*Pat 4 java algorithm linked-list

我一直在尝试使用 Java 在当前节点之后将节点插入到链表中。我已经能够在当前节点之前插入,但我无法让它工作:

这是 的代码insertNodeBefore。我只想知道是否有办法调整它以便能够在当前节点之后插入?

// Insert new node nVal to the list before current node curVal 
public void insertNodeBefore(E nVal, E curVal) {
    Node<E> newNode = new Node<E>(nVal);

    Node<E> curr = head;
    Node<E> prev = null;

    if (head.getNodeValue() == curVal) {
        newNode.setNext(head);
        head = newNode;
        return;
    }

    // scan until locate node or come to end of list
    while (curr != null) {
        // have a match 
        if (curr.getNodeValue() == curVal) {
            // insert node
            newNode.setNext(curr);
            prev.setNext(newNode);
            break;
        } else {
            // advanced curr and prev
            prev = curr;
            curr = curr.getNext();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*INO 5

基本上找到节点,然后:

  • 将新节点的下一个设置为当前节点
  • 将当前节点的下一个设置为新节点

这样的事情应该工作:

public void insertNodeBeAfter(E nVal, E curVal) {
    Node<E> newNode = new Node<E>(nVal);

    Node<E> curr = head;

    // scan until locate node or come to end of list
    while (curr != null) {
        // have a match 
        // Replaced == with .equals
        if (curr.getNodeValue().equals(curVal)) {
            // insert node
            newNode.setNext(curr.getNext());
            curr.setNext(newNode);
            break;
        } else {
            curr = curr.getNext();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意没有必要对头部进行不同的治疗,因为它不会改变。

注意:如果列表为空或未curVal找到,则静默处理 NOT 可能会很有趣,例如抛出RuntimeException.