链表中的指针算术混淆

时间:2016-12-31 19:34:20

标签: c++ data-structures

所以我正在查看一个链接列表,其节点设置如下

    struct node {
        node *next; 
        node **prev;
    };
    node *rel_list;

有人可以解释指针操作如何在以下代码块(来自节点创建函数)中工作,尤其是第5行。

    1 node *r;
    2 r->next = rel_list;
    3 r->prev = &rel_list;
    4 if (rel_list)
    5  rel_list->prev = &r->next;
    6 rel_list = r;

1 个答案:

答案 0 :(得分:1)

在大多数链表实现中,指针指向节点,而不指向指针:

+------+  
| prev |  
+------+  
| data |
+------+  
| next |
+------+  

+------+          +------+          +------+  
|  0   |   +------|      |   +------|      |  
+------+   |      +------+   |      +------+  
|  A   |<--+  +-->|   B  |<--+  +-->|  C   |  
+------+      |   +------+      |   +------+  
|      |------+   |      |------+   |  0   |  
+------+          +------+          +------+  

在您的代码中,您使前一个指针指向下一个指针而不是前一个节点

编辑1:示例

node * ptr_node = new node;
ptr_node->prev = nulptr;
ptr_node->next = nulptr;
// Insert at the head
ptr_node->prev = head_pointer;
ptr_node->next = head_pointer->next;
head_pointer = ptr_node;

链接列表是,恕我直言,更好地绘制(图片)来掌握概念。浏览上面的例子并“画出”每一步。