[英]Adding to the head in a doubly linked list
我有以下几点:
typedef struct value value;
struct value{
value* prev;
value* next;
int value;
};
...
//ent = entry
if(entry_head == NULL) {
entry_head = ent;
entry_tail = ent;
entry_tail->prev = NULL;
}
else { // add to top
entry_head = ent
entry_tail = entry_tail->next;
}
当我在列表中插入一些值时,得到以下结果。
Expected: b Result: a
a b
如何修改它,以使新添加的节点链接到先前节点的顶部?
您的代码未设置足够的指针。 通常,必须确保新节点的prev
是正确的; next
是正确的; 前一个条目的next
是正确的; 而下一个条目的prev
是正确的(小心,如果上一个或下一个条目是NULL)。
假设全局变量为:
value *entry_head = NULL;
value *entry_tail = NULL;
那么插入新value *ent
(已经使用值初始化)的代码为:
if (entry_head == NULL)
{
assert(entry_tail == NULL);
entry_head = ent;
entry_tail = ent;
ent->next = NULL;
ent->prev = NULL;
}
else
{
assert(entry_tail != NULL);
ent->next = entry_head;
ent->prev = NULL;
entry_head->prev = ent;
entry_head = ent;
}
可以使用类似的代码插入列表的末尾,并在列表中的现有条目之前或之后插入稍有不同的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.