Связанный список не отображается - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в C, только начал изучать Linked List. Я думаю, что мои функции добавления работают правильно, но, похоже, не отображает мой связанный список.Я не получаю ошибок или предупреждений, и он не падает.

</p>

<code>struct node
{
    int data;
    struct node *next;
};
typedef struct node *User;

User newUser()
{
    User newNode;
    newNode = (User)malloc(sizeof(struct node));
    newNode->next = NULL;

    return newNode;
}
void add(User head, int x)
{
    User temp, p;

    temp = newUser();
    temp->data = x
    if(head == NULL)
    {
        head = temp;
    }
    else
    {
        p = head;
        while(p != NULL)
        {
            p = p->next;
        }
        p->next = head;
    }
}
void displayData(User head)
{
    User temp;

    temp = head;

    while(head != NULL)
    {
        printf("%d ",temp->data);
        temp = temp->next;
    }
}
</code>

РЕДАКТИРОВАТЬ: Как я вызываю функцию

Голова пользователя = NULL

add (head, 10);

displayData (голова);

1 Ответ

0 голосов
/ 22 февраля 2019

Вы не показываете, как вы вызываете 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, и тогда его легче увидеть, когда у вас естьуказатель или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...