Можно ли связать все ссылки узла в функции create_new_node? - PullRequest
0 голосов
/ 28 января 2019

Я изучаю связанный список, и мне просто интересно, будет ли хорошей / плохой практикой связывать все ссылки нового узла с функцией * create_new.

Из того, что я читаю онлайн, они только следующая ссылка, но я хочу, чтобы она также соединяла предыдущую ссылку.Вот мой код:

node *create_new (int new_data, node *prev, node *next)
{
node *new_node = malloc(sizeof(node));
if (new_node == NULL)
{
    printf("Error in creating new node\n");
    exit(0);
}

new_node->data = new_data;
new_node->next = next;
prev->next = new_node;

return new_node;
}

Ответы [ 3 ]

0 голосов
/ 28 января 2019
  • Узел простого связанного списка имеет указатель только на следующий узел.
  • Узел двойного связанного списка имеет два указателя;указатель на следующий узел и указатель на предыдущий узел.

Я предполагаю, что вы читаете в Интернете о простых связанных списках (по умолчанию, когда люди говорят о связанных списках, они простые).

0 голосов
/ 28 января 2019

Ваш код работает.Однако для односвязного списка вам не нужно передавать next, потому что prev->next должен указывать на next:

node *create_new (int new_data, node *prev)
{
    node *new_node = malloc(sizeof(node));
    if (new_node == NULL)
    {
        printf("Error in creating new node\n");
        exit(0);
    }

    new_node->data = new_data;
    new_node->next = prev->next;
    prev->next = new_node;

    return new_node;
}
0 голосов
/ 28 января 2019

Это позволяет вставить ячейку в двойной связанный список (например, std :: list) или заменить последовательные ячейки на новую

Если prev-> next равно далее вставить новую ячейку между ними.

Если prev-> next отличается от next , то все ячейки между ними заменяются новыми(и может быть потеряно и не удалено)

Если у вас есть n0<->n2<->n3, и у вас есть create_new(1, n0, n2), у вас будет n0<->n1<->n2<->n3, но если сейчас вы наберете create_new(7, n0, n3), у вас будет n0<->n7<>n3 и клетки n1 и n2 удалены (и могут быть потеряны)

Итак, одно можно сказать наверняка: оно имеет неправильное имя, потому что оно больше replaceBetween

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