链表中的指针算术混乱



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

    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;

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

+------+  
| 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;

恕我直言,链表更适合绘制(图片)以掌握概念。 浏览上面的示例并"绘制"每个步骤。

最新更新