繁体   English   中英

在双向链接列表中添加到头部

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM