我有一个我创建的列表:
struct list_t {
int value;
struct list_t* next;
};
我的'addFirst':
void addFirst(struct list_t* head,int value) {
struct list_t* toAdd = (struct list_t*) malloc (sizeof (struct list_t));
toAdd->value = value;
toAdd->next = head;
head = toAdd;
}
问题在于,当我将新的“节点”添加到列表中时,它可以在函数中使用(使用 DDD调试器看),但当我退出该函数时,我的列表保持不变。
我知道这可以通过让我的方法返回struct list_t*
而不是void
来完成,并且通过将指向head的指针作为参数传递({{1} })但我的问题是,是否有可能使用我的方法(即返回struct list_t** PtoHead
并指向void
作为参数)。
答案 0 :(得分:1)
你可以做到,但它会很难看。
如果您将新元素作为元素编号2链接,并相应地移动数据,则可以用新元素替换旧元素,同时在其后添加新元素:
void addFirst(struct list_t* head, int value)
{
struct list_t* toAdd = malloc(sizeof *toAdd);
toAdd->value = head->value;
head->value = value;
toAdd->next = head->next;
head->next = toAdd;
}
这假定head
不是NULL,对于这种情况,我认为使用这个原型是不可能解决的。
我强烈建议不要这样做,这是非常不直观的。