我试图实现一个insertAfterNth
方法,该方法在双向链表上的第n个(从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++;
}
答案 0 :(得分:0)
尝试使用
我可能错了。
答案 1 :(得分:0)
代码大多是正确的。您必须在列表的开头添加一个插入方法,但是根据您的描述/方法名称,您似乎在>> 节点之后插入,因此在开始时添加插入可能没有意义。当head节点为null时,您必须检查大小写。另一个问题是如果操作成功则返回一个布尔值。另一个好的返回可以是新插入的节点,如果操作失败则返回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
}