所以我正在查看一个链表,其中节点设置如下
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;
恕我直言,链表更适合绘制(图片)以掌握概念。 浏览上面的示例并"绘制"每个步骤。