Руками. Если лень писать свою хеш таблицу, то можно и совсем в тупую. Итерируйтесь по списку a. Внутри итерируйтесь по списку b и, если нашли там элемент, то удаляйте из a. Иначе переходите к следующему элементу.
Более продвинутый вариант - отсортировать список b и искать там каждый элемент из a бинарным поиском.
Удобный трюк для удаления элементов из массива - хранить индекс первого не занятого элемента. Тогда получается что-то вроде этого:
int empty_pos = 0;
for (int i = 0; i < n; ++i) {
if (!ShouldDelete(a[i], b)) {
a[empty_pos++] = a[i];
}
}
n = empty_pos;