Чтобы немного проанализировать ваш код:
Это похоже на 1 ход пузырьковой сортировки, так что не ожидайте, что она все отсортирует.
Это только гарантирует, что наибольшее значение *1005* станет элементом last . И только после того, как вы исправите часть подкачки:
if (current.Data > current.Next.Data)
{
temp = current.Data;
current.Data = current.Next.Data;
current.Next.Data = temp;
}