所以我正在查看一个链接列表,其节点设置如下
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;
答案 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;
链接列表是,恕我直言,更好地绘制(图片)来掌握概念。浏览上面的例子并“画出”每一步。