【发布时间】:2011-08-14 17:23:23
【问题描述】:
我尝试用 C 编写双链表。
这是我的实现:
typedef struct
{
void* value;
struct Dlist* prev;
struct Dlist* next;
} Dlist;
Dlist* createDlist()
{
Dlist* newList = (Dlist*)malloc (sizeof(Dlist));
newList->value = NULL;
newList->next = NULL;
newList->prev = NULL;
return newList;
}
/*
* Get last element from Dlist
*/
Dlist* getLast(Dlist* list)
{
if (list)
{
while(list->next)
list = (Dlist*)list->next;
}
return list;
}
/*
* add element to list at start
*/
Dlist* addItemAtStart(Dlist* list, Pair* value)
{
Dlist* newList = NULL;
Dlist* last = NULL;
newList = createDlist ();
newList->value = value;
if (list)
{
last = getLast(list);
last->next = newList;
newList->prev = last;
return list;
}
else
return newList;
}
现在,当我尝试向列表中添加元素时,我每次都需要分配一个新值:
list = addItemAtStart(list, "Hello");
但我只想要
addItemAtStart(list, "Hello");
如果没有list =,我怎样才能使列表在没有分配的情况下发生变化?
p.s.我得到了Dlist* addItemAtStart(Dlist **list, void* value)的segfaut
我尝试这样插入:
Dlist **list = NULL;
addItemAtStart(&list, "Hello");
谢谢。
【问题讨论】:
-
您必须考虑您的全局“列表”对象是什么。您定义的实际上更像是一个“列表节点”,而不是列表本身。您如何处理列表本身?
-
另外,如果您有一个列表对象,您可以存储一个指向最后一个列表节点的指针,这样您就不必反复查找它。
标签: c list data-structures linked-list