см получить минимальное значение узлов, исключительный случай - PullRequest
0 голосов
/ 28 апреля 2020

Вопрос был удален, так как содержит личный код

1 Ответ

1 голос
/ 28 апреля 2020

Это классический код сортировки слиянием, в котором есть четыре случая при условии, что не оба списка исчерпаны:

  1. a исчерпано;
  2. b исчерпан;
  3. a <<em> b и
  4. a b .

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

Запишите эти случаи в явном виде. Сначала небольшая вспомогательная функция, которая продвигает узел и возвращает значение:

static int advance(Node *nd)
{
    int res = (*nd)->x;

    *nd = (*nd)->next;

    return res;
}

Теперь ваша фактическая функция очень проста:

int getMin(Node *list1, Node *list2)
{
    assert(*list1 || *list2);

    if (*list1 == NULL) return advance(list2);
    if (*list2 == NULL) return advance(list1);
    if ((*list1)->x < (*list2)->x) return advance(list1);

    return advance(list2);
}

Посмотрите ее в действии на ideone .

...