Я думаю, что ошибка в строке if (head == tail), если вы измените ее на if (head == NULL), она должна вывести 10 20 30. Однако, если вам интересно, почему if (head == tail) ) является причиной этой проблемы, потому что для каждой операции addNode голова и хвост равны, и, наконец, голова также собирается в 30!