Вы не показываете, как вы вызываете add
, но даже в этом случае очень легко понять, почему он не работает.
Когда вы используете переменную в вызове функции, как, например,
User mylist;
add(mylist, 10);
значение mylist
остается неизменным, поскольку вы передаете его значение только add
.
Некоторые языки имеют возможность передавать по ссылке, но C этого не делает.«т.Но вместо этого вы можете передать указатель на переменную.
add(&mylist, 10);
, а затем add
станет чем-то вроде ...
void add(User *head, int x)
{
User temp, p;
temp = newUser();
temp->data = x
if(*head == NULL)
{
*head = temp;
// etc...
и там, где вы использовали head
ранее, выотмените ссылку так, чтобы вы использовали значение mylist
, а если вы измените значение *head
, вы измените значение mylist
.
Также ваше typedef
из User
делает очень трудным для чтения код, поскольку скрывает тот факт, что он на самом деле является указателем на struct node
- вы должны просто сделать его typedef
из struct node
, и тогда его легче увидеть, когда у вас естьуказатель или нет.