Функция получения ключа из односвязного списка и службы ошибок - PullRequest
0 голосов
/ 09 апреля 2019

Я получил последовательность (односвязный список):

class Sequence
{
    struct Node {
        Key key;
        Info info;
        Node *next;
    };

Node *head = NULL;

и функцию для этого:

template <typename Key, typename Info>
Key Sequence<Key, Info>::getKey(int pos)const
{
    Node *curr = head;
    int i = 1;
    while((curr) && (i < pos))
    {
        i++;
        curr = curr->next;
    }
    if(curr)
    {
        return curr->key;
    }
    cout << "no Node with such a key" << endl;
    return NULL;
}

Он должен получить ключ на основе заданного параметра POS, которыйпозиция в списке.Когда он отлично работает для диапазона списка, он не для отрицательных значений (он должен показывать некоторый текст, которого нет в этом узле) и значений вне диапазона (тот же случай, что и для отрицательных значений).Где ошибка?

1 Ответ

0 голосов
/ 09 апреля 2019

Отслеживать размер списка внутри объекта Sequence.Это позволяет вам выполнить проверку прежде всего:

template <typename Key, typename Info>
Key Sequence<Key, Info>::getKey(int pos)const
{
    //Add a size() member function to sequence that returns the size
    // Store the size as a member variable
    if(pos >= size() || pos < 0) {
        cout << "no Node with such a key" << endl;
        return NULL; 
    }
    Node *curr = head;
    int i = 1;
    while((curr) && (i < pos))
    {
        i++;
        curr = curr->next;
    }
    if(curr)
    {
        return curr->key;
    }
    return NULL;
}
...