【发布时间】:2022-01-01 22:31:10
【问题描述】:
我想用一个简单的指针来实现这个功能,但它不起作用! 此函数的目标是将第一个元素放在列表的末尾。 例如:a b c d e
b c d e a
typedef struct liste liste_t;
struct liste
{
int nbr;
liste_t *next;
};
void put_at_the_end(liste_t *list)
{
liste_t *temp1 = list;
liste_t *temp2 = NULL;
if (list == NULL || list->next == NULL)
return (list);
while (list->next->next != NULL)
list = list->next;
temp2 = list->next;
temp2->next = temp1->next;
temp1->next = NULL;
list->next = temp1;
}
感谢您的帮助!
【问题讨论】:
-
您需要能够更改
list指针。但这对于当前的函数原型是不可能的。需要传入liste_t ** -
如果不更改列表的头部,您将无法执行此操作。通常,您通过返回(可能)新的头,或通过将指针传递给指向头的指针来做到这一点。更好的是,您将指针传递给包含指向头部的指针的列表对象。您的
liste_t类型实际上是node_t。你的函数必须选择:或者它是 void 或者它返回一些东西。 -
在不需要时避免使用
**。**是一个副作用。改用返回值。如果不是绝对必要,应避免副作用。
标签: c