код для добавления нового целочисленного элемента в последний из связанного списка - PullRequest
0 голосов
/ 30 апреля 2020

Я показал здесь, блок, включающий объявление структуры (вне основной функции) и функцию append () для добавления элемента. Поэтому, отображая элементы, я получаю еще около 7 номеров, я не знаю, адрес это или что-то в этом роде. Спасибо за помощь!

struct node
{
   int data;
   struct node* next;
};
void append(struct node** head_add,int p)
{
   struct node* new_node=(struct node *)malloc(sizeof(struct node));
   struct node* ptr=(*head_add);
   new_node->data=p;
   new_node->next=NULL;
   if (*head_add == NULL) 
   { 
      *head_add = new_node; 
      return; 
   }   
   while(ptr->next!=NULL)
   ptr=ptr->next;
   ptr->next=new_node;
}

Примечание: вот функция display (), которую я использовал:

void display(struct node *head)
{
   while(head->next!=NULL)
   {
       printf("%d",head->data);
       head=head->next;
   }
} 

Edit:

int main()
{
    struct node *head=(struct node *)malloc(sizeof(struct node));
    head->next=NULL;

, тогда есть другие вещи ,,

, а затем вот вызов в середине if-else:

else if(y==3)
        {
            printf("Enter the value to be added\n");
            scanf("%d",&p);
            append(&head,p);

        }

1 Ответ

2 голосов
/ 30 апреля 2020

У вас есть фиктивный узел в начале списка, данные которого вы не инициализируете. Вот откуда берется мусорная ценность. Кроме того, вы пропускаете последнее значение при отображении данных, поскольку проверяете, является ли узел после текущего узла нулевым.

Вы можете оставить фиктивный узел и исправить свой код, напечатав head->next->data, но не делайте этого! Пустой узел усложняет все. Пустой список не имеет узлов, а указатель его головы равен NULL. Итак, инициализируйте ваш список следующим образом:

struct node *head = NULL;        // empty list

Затем исправьте функцию отображения так, чтобы она посещала каждый узел:

void display(struct node *head)
{
     while (head != NULL) {
         printf("%d\n", head->data);
         head = head->next;
     }
} 

Ваша функция, которая добавляет значение, уже заботится о пустых списках, поэтому вам не нужно ничего там менять.

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