Java 双链接列表混淆
我对下面的段代码有点困惑,假设我们已经有了一个双链表head->tailJava 双链接列表混淆,java,list,linked-list,nodes,doubly-linked-list,Java,List,Linked List,Nodes,Doubly Linked List,我对下面的段代码有点困惑,假设我们已经有了一个双链表head->tail class DLinkedNode { int key; int value; DLinkedNode pre; DLinkedNode post; } /** * Always add the new node right after head; */ private void addNode(DLinkedNode node){ node.pre = head; // line
class DLinkedNode {
int key;
int value;
DLinkedNode pre;
DLinkedNode post;
}
/**
* Always add the new node right after head;
*/
private void addNode(DLinkedNode node){
node.pre = head; // line 1
node.post = head.post; // line 2
head.post.pre = node; // line 3
head.post = node; // line 4
}
我试图追踪代码
第1行:头部->节点;头部->尾部(原始列表)
第2行:头部->节点->尾部;头部->尾部(原始列表)
第3行:
第4行:
我看不懂第3行和第4行,在执行第1行和第2行之后,有两个双链接列表(一个是原始的双链接列表,另一个是新创建的)?第3行指的是哪一个标题?第3行表示列表中的第一项应具有新的最后一项的先前值
第4行表示,旧的最后一个项目现在实际上应该有一个指向新头部的下一个值。第3行修改旧的第二个节点(现在是第三个节点)。它将新的第二个节点设置为其上一个节点
第4行修改head以将新节点设置为第二个节点。假设head和tail最初是双链接列表中仅有的两个节点,下面是发生的情况。。。在艺术中 通话前:
+--------+
| post|
| node |
|pre |
+--------+
+-------------------------------------------+
| |
| |
| +--------+ +--------+ |
+-> | post+---------------> | post+---+
| head | | tail |
+---+pre | <---------------+pre | <-+
| +--------+ +--------+ |
| |
+-------------------------------------------+
+--------+
|职位|
|节点|
|前|
+--------+
+-------------------------------------------+
| |
| |
| +--------+ +--------+ |
+->| post+------------->| post+---+
|头| |尾|
+---+前| |后+---+
|头| |尾|
+---+前| |后+---+
|头| |尾|
+---+前| |后+---+
|头| | |尾|
+---+前+----+前| |后+----+| |后+---+
|头| | |尾|
+---+pre |+------+pre | | post+----------->post+----------->post+---+
|头部| |节点| |尾部|
+---+前双链表的初始状态
head -----------------> head.post
在这种情况下,考虑<强>头.POST <强>是任意节点,新节点将在<强>头<强>之后,在<强>头之前。
head
、head.post
和节点
的引用状态逐渐变化如下
一线
node.pre=头部强>
head <----------------> head.post
head <----------------- node
head <----------------> head.post
head <----- node -----> head.post
head <----- node <----> head.post
head <----> node <----> head.post
head.post
头
head -----------------> head.post
head <----------------> head.post
head <----------------- node
head <----------------> head.post
head <----- node -----> head.post
head <----- node <----> head.post
head <----> node <----> head.post