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