首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DoublyLinkedList混淆

DoublyLinkedList混淆
EN

Stack Overflow用户
提问于 2016-03-11 18:35:22
回答 4查看 95关注 0票数 2

我对下面的片段代码有点困惑,假设我们已经有了一个双链接列表头->尾;

代码语言:javascript
复制
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
}

我试着追踪代码

line1:头->节点;头->尾(原始列表)

line2:头->节点->尾;头->尾(原始列表)

line3:?

line4:?

我无法理解第3行和第4行,在执行第1行和第2行之后,有两个双链接列表(一个是原始的双链接列表,另一个是新创建的链接列表)?第3行指的是哪个头?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-11 19:08:26

假设头和尾最初是双链接列表中唯一的两个节点,下面是发生的情况.在艺术上!

打电话之前:

代码语言:javascript
复制
                  +--------+
                  |    post|
                  |  node  |
                  |pre     |
                  +--------+

+-------------------------------------------+
|                                           |
|                                           |
|   +--------+                 +--------+   |
+-> |    post+---------------> |    post+---+
    |  head  |                 |  tail  |
+---+pre     | <---------------+pre     | <-+
|   +--------+                 +--------+   |
|                                           |
+-------------------------------------------+

第1行:

代码语言:javascript
复制
                  +--------+
                  |    post|
                  |  node  |
       +----------+pre     |
       |          +--------+
       |
+------|------------------------------------+
|      |                                    |
|      v                                    |
|   +--+-----+                 +--------+   |
+-> |    post+---------------> |    post+---+
    |  head  |                 |  tail  |
+---+pre     | <---------------+pre     | <-+
|   +--------+                 +--------+   |
|                                           |
+-------------------------------------------+

第2行:

代码语言:javascript
复制
                  +--------+
                  |    post+---------+
                  |  node  |         |
       +----------+pre     |         |
       |          +--------+         |
       |                             |
+------|-----------------------------|------+
|      |                             |      |
|      v                             v      |
|   +--+-----+                 +-----+--+   |
+-> |    post+---------------> |    post+---+
    |  head  |                 |  tail  |
+---+pre     | <---------------+pre     | <-+
|   +--------+                 +--------+   |
|                                           |
+-------------------------------------------+

第3行:

代码语言:javascript
复制
                  +--------+
                  |    post+---------+
                  |  node  |         |
       +----------+pre     |         |
       |          +------+-+         |
       |                 ^           |
+------|-----------------|-----------|------+
|      |                 |           |      |
|      v                 |           v      |
|   +--+-----+           |     +-----+--+   |
+-> |    post+---------------> |    post+---+
    |  head  |           |     |  tail  |
+---+pre     |           +-----+pre     | <-+
|   +--------+                 +--------+   |
|                                           |
+-------------------------------------------+

第4行:

代码语言:javascript
复制
                  +--------+
                  |    post+---------+
                  |  node  |         |
       +----------+pre     |         |
       |          +-+----+-+         |
       |            ^    ^           |
+------|------------|----|-----------|------+
|      |            |    |           |      |
|      v            |    |           v      |
|   +--+-----+      |    |     +-----+--+   |
+-> |    post+------+    |     |    post+---+
    |  head  |           |     |  tail  |
+---+pre     |           +-----+pre     | <-+
|   +--------+                 +--------+   |
|                                           |
+-------------------------------------------+

最终结果:

代码语言:javascript
复制
+----------------------------------------------------+
|                                                    |
|                                                    |
|   +--------+        +--------+        +--------+   |
+-> |    post+-------->    post+-------->    post+---+
    |  head  |        |  node  |        |  tail  |
+---+pre     <--------+pre     <--------+pre     | <-+
|   +--------+        +--------+        +--------+   |
|                                                    |
+----------------------------------------------------+
票数 4
EN

Stack Overflow用户

发布于 2016-03-11 18:39:50

第3行的意思是,列表中的第一项应该具有以前新的最后一项的值。

第4行表示,旧的最后一项现在应该有一个指向新头的下一个值。

票数 1
EN

Stack Overflow用户

发布于 2016-03-11 18:42:57

第3行修改旧的第二个节点(现在是第三个节点)。它将新的第二个节点设置为它的前一个节点。

第4行修改头,将新节点设置为第二个节点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35947502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档