如何在两个虚拟节点之间的双向链表的开头添加一个节点?
How can I add a node at the beginning of a doubly linked list in-between two dummy nodes?
我正在尝试编写一个函数 addFirst()
,它接受一个项目并将其插入到双向链表的前面。双向链表有两个虚拟节点,每端一个。当我遍历列表并打印它时,到目前为止我编写的 addFirst()
方法只 returns 到两个虚拟节点。我无法弄清楚我的代码有什么问题。
public void addFirst(E item) {
if (item.equals(null)) { throw new NullPointerException(); }
Node node = new Node(item, null);
Node ptr = first;
ptr.next.prev = node;
node.prev = ptr;
node.next = ptr.next;
}
public static void main(String[] args) {
Deque<Integer> lst = new Deque<Integer>(); // empty list
lst.addFirst(1);
lst.addFirst(2);
lst.addFirst(3);
Iterator<Integer> it = lst.iterator(); // tests iterator method
while (it.hasNext()) {
Integer val = it.next();
System.out.println(val);
}
}
当我 运行 main 时,我得到的是:
null null
不过,我预计:
null 3 2 1 null
任何人都可以告诉我如何修复我的代码,以便我可以在我的双向链表的开头添加一个项目在两个虚拟的第一个和最后一个节点之间吗?
我发现我做错了什么。我只需要通过添加行
来完成链
ptr.next = node;
所以这个方法的完整代码如下所示:
public void addFirst(E item) {
if (item.equals(null)) { throw new NullPointerException(); }
Node node = new Node(item, null);
Node ptr = first;
ptr.next.prev = node;
node.prev = ptr;
node.next = ptr.next;
ptr.next = node;
}
我正在尝试编写一个函数 addFirst()
,它接受一个项目并将其插入到双向链表的前面。双向链表有两个虚拟节点,每端一个。当我遍历列表并打印它时,到目前为止我编写的 addFirst()
方法只 returns 到两个虚拟节点。我无法弄清楚我的代码有什么问题。
public void addFirst(E item) {
if (item.equals(null)) { throw new NullPointerException(); }
Node node = new Node(item, null);
Node ptr = first;
ptr.next.prev = node;
node.prev = ptr;
node.next = ptr.next;
}
public static void main(String[] args) {
Deque<Integer> lst = new Deque<Integer>(); // empty list
lst.addFirst(1);
lst.addFirst(2);
lst.addFirst(3);
Iterator<Integer> it = lst.iterator(); // tests iterator method
while (it.hasNext()) {
Integer val = it.next();
System.out.println(val);
}
}
当我 运行 main 时,我得到的是:
null null
不过,我预计:
null 3 2 1 null
任何人都可以告诉我如何修复我的代码,以便我可以在我的双向链表的开头添加一个项目在两个虚拟的第一个和最后一个节点之间吗?
我发现我做错了什么。我只需要通过添加行
来完成链ptr.next = node;
所以这个方法的完整代码如下所示:
public void addFirst(E item) {
if (item.equals(null)) { throw new NullPointerException(); }
Node node = new Node(item, null);
Node ptr = first;
ptr.next.prev = node;
node.prev = ptr;
node.next = ptr.next;
ptr.next = node;
}