Добавление узла в связанный список - PullRequest
0 голосов
/ 25 декабря 2018

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

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

image

void AddNewItem(PItem *head, PItem *tail, int n, int a, float b){
    PItem temp = *head, curr = *head;
    temp->num = a;
    temp->price = b;
    temp = (PItem*)malloc(sizeof(PItem));

    while (n < temp->num) {
        temp = temp->next;
        curr = curr->next;
    }
    temp->next = curr->next;
    curr->next = temp;
}

Вот структура:

typedef struct Item
{
    int num;
    float price;
    struct Item* next;
}*PItem;

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

@ user3629249 Это Elad Kobi. Спасибо за помощь.Когда я пытаюсь отладить ваш код, я получаю несколько ошибок.Другое дело, вы не использовали параметры tail и n.Параметр n представляет позицию узла, который я хочу добавить.

0 голосов
/ 26 декабря 2018

Следующий предложенный код:

  1. исключает неиспользуемые параметры
  2. безупречно компилирует
  3. выполняет требуемую операцию
  4. правильно проверяет ошибки

А теперь предложенный код:

#include <stdlib.h>
#include <stdio.h>

// format struct definition for readability 
// and eliminate undesireable 'typedef' of a pointer
struct Item 
{ 
    int num; 
    float price; 
    struct Item* next; 
};


// use meaningful names for paramters and
// allow for this might be first entry into linked list
void AddNewItem(struct Item **head, int num, float price)
{
    struct Item *curr = *head;
    struct Item *prev = *head;

    struct Item *newNode = malloc(sizeof(struct Item));
    if( !newNode )
    {
        perror( "malloc failed" );
        exit( EXIT_FAILURE );
    }

    // implied else, malloc successful

    // initialize fields of new node
    newNode->num = num;
    newNode->price = price;  
    newNode->next = NULL;

    // check if first node added to linked list
    if( !*curr )
    { // then first addition to linked list
        *curr = newNode;
    }

    else
    {
        // check for end of linked list and
        // check for found desired position in linked list
        while ( curr->next )  
        {
            if( curr->num >= newNode->num )
            {
                break;
            }

            // implied else

            prev = curr;
            curr = curr->next;
        }

        // insert the new item into the linked list
        newNode->next = curr;
        prev->next = newNode;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...