gpt4 book ai didi

c - C中链表中的'addFirst'方法

转载 作者:行者123 更新时间:2023-12-04 12:02:48 25 4
gpt4 key购买 nike

我有一个我创建的列表:

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 指针的指针来实现作为参数 (struct list_t** PtoHead) 但我的问题是是否可以使用我的方法执行此操作(即返回 void 并有一个指向 的指针head 作为参数)。

最佳答案

你可以做到,但会很丑。

如果将新元素链接为元素编号 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,对于这种情况,我认为使用这个原型(prototype)是不可能解决的。

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

关于c - C中链表中的'addFirst'方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com