Ошибка возврата указателя на локальную переменную. x указывает на переменную, выделенную в куче:
link x = new node(a[m]);
Thus x isn't pointing to a local variable.
Причина, по которой возвращать указатель на локальную переменную, является ошибкой в том, что такая переменная существует только до тех пор, пока функция активна (т. е. между ним вводится и завершается). Переменные, выделенные в куче (например, с использованием нового оператора), существуют до тех пор, пока они не будут освобождены (например, с оператором удаления).