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