C中链表中的'addFirst'方法

时间:2012-09-28 14:11:46

标签: c pointers linked-list singly-linked-list

我有一个我创建的列表:

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作为参数)。

1 个答案:

答案 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,对于这种情况,我认为使用这个原型是不可能解决的。

我强烈建议不要这样做,这是非常不直观的。