Я пытаюсь объединить два связанных списка в 1 связанный список в порядке возрастания - PullRequest
0 голосов
/ 30 сентября 2019

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

  void linkedListType::AscendMerge()
  {
    nodeType * c1;
    nodeType * c2;
    nodeType * p1;
    nodeType * p2;
    c1 = first;
    c2 = head;
    p1 = first;
    p2 = head;

    while (c1->link&&c2->link != NULL)
    {
      if (c1->info <= c2->info)
      {
        c1->link->link = c2->link;

      }
      if (c2->info < c1->info)
      {
        c1->link = c2->link;

      }
      cout << c1->info << " ";
      c1 = c1->link;
      c2 = c2->link;
     }
   }

1 Ответ

1 голос
/ 30 сентября 2019

Есть две проблемы с вашей реализацией. Один из них связан с самим алгоритмом, а второй - с тем, как он кодируется в C ++.

Проблема с алгоритмом заключается в том, что ваш код не имеет дело с «хвостами» кода. списки: ваш цикл while вызывает его завершение, как только в одном из списков заканчиваются элементы, оставляя оставшиеся элементы второго списка «осиротевшими».

Исправить эту часть просто: все, что вам нужноdo связывает оставшийся ненулевой список с концом результата.

Проблема кодирования состоит из нескольких частей: во-первых, ваша реализация не получает два списка для объединения в качестве параметров: оба c1 и p1 назначены head, предположительно объединяя список с самим собой. Во-вторых, ваш цикл while останавливается до достижения конца списка: c1->link, являющийся NULL, означает, что c1 - последний узел;Ваш код никогда не проверяет его значение. Наконец, ваш код не возвращает объединенный список. Ваш код изменяет значения link, но когда слияние касается head, указатель не изменяется и не возвращается.

...