繁体   English   中英

在双向链表中插入元素

[英]Inserting element in a doubly linked list

我正在尝试实现一个insertAfterNth方法,该方法在双链表的nth(从1开始,不是0)元素之后插入一个元素。 而且,我被困在将上一个节点设置为我要插入的节点上。 我需要一些帮助来解决问题。 谢谢。

public class DListNode {
    public DListNode next;
    public DListNode prev;
    public int item;

    ...
}

public void insertAfterNth(int n, int item) {

    if (n > length() || n < 1) {
      System.out.println("error: out of bounds");
      return;
    }
    else if (n == length()) {
      insertEnd(item);
    }
    DListNode walker = head;
    int i = 1;
    while (i != n) {
      i++;
      walker = walker.next;
    }
    DListNode node = new DListNode(item);
    node.next = walker.next;
    walker.next.prev = node; /* not sure if this line of code is right, regardless this method is giving me errors(I'm most certain that this line is causing the problem)*/
    walker.next = node;
    node.prev = walker;
    size++;
}

尝试使用

  • (walker.next)。上一个

我可能错了。

该代码大部分是正确的。 您必须在列表的开头添加一个插入方法,但是从您的描述/方法名称来看,您似乎节点之后插入,因此在开头添加插入可能没有意义。 您必须检查头节点为空的情况。 另一个建议是,如果操作成功,则返回一个布尔值。 另一个好的回报可以是新插入的节点,如果操作失败,则返回null。 如果您不希望返回值,也可能会引发异常。

public class DoubleLinkedList {

private DListNode head;
private DListNode tail;
private int size;

private class DListNode {
    private DListNode next;
    private DListNode prev;
    private int item;

    private DListNode(final int item) {
        this.item = item;
    }
}

public void insertAfterNth(final int n, final int item) {
    if (size == 0) {
        System.out.println("error: list is empty");
    } else if ((n > size) || (n < 1)) {
        System.out.println("error: out of bounds");
        return;
    } else if (n == size) {
        insertEnd(item);
    } 
    DListNode walker = head;
    int i = 1;
    while (i < n) {
        i++;
        walker = walker.next;
    }
    DListNode node = new DListNode(item);
    node.next = walker.next;
    walker.next.prev = node;
    walker.next = node;
    node.prev = walker;
    size++;
}

private void insertEnd(int item) {
    size++;
    final DListNode newItem = new DListNode(item);
    if (head == null) {
        head = newItem;
        tail = newItem;
    } else {
        tail.next = newItem;
        newItem.prev = tail;
        tail = newItem;
    }
}

public void add(final int item) {
    insertEnd(item);
}

//the rest of operations you wish to implement

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM