Это действительно легко, если ваши объекты стека сохраняют оба конца стека (верх / низ, начало / конец, голова / хвост и т. Д.). Я буду использовать top / bottom для этого ответа.
Когда вы реализуете push / pop, вы работаете с верхним объектом. Нижняя часть останется прежней (если только стек не пуст), а узел, который его представляет, будет иметь следующий указатель, равный нулю.
Итак, чтобы объединить два стека, вы берете нижнюю часть одного, наведите его навершины другого и возвращают «новый» стек, сформированный из других указателей.
Stack merge(Stack s1, Stack s2) {
// join the stacks
s2.bottom.next = s1.top
// make a nice object to give back
Stack result;
result.bottom = s1.bottom
result.top = s2.top
// cleanup the parameters so they don't mess up the new structure.
s1.bottom = s1.top = s2.bottom = s2.top = null;
return result;
}
Если у вас нет двух указателей, хорошо удерживаемых в объекте стека, вам нужно будет пройти один из стековполучить то, что будет сохранено здесь как дно, делая сложность O (N).