Java 双链接列表混淆

Java 双链接列表混淆,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

我对下面的段代码有点困惑,假设我们已经有了一个双链表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 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