Ну я бы в свои студенческие годы взялся поспорить с преподом что с такой формулировкой манипуляций со списком не требуется вообще.
Т.е. программа (по его мнению) состоит из этапов:
1. Ввод матрицы в обычном виде
2. Пробразование ее в список
3. Манипуляция со списком
4. Вывод результирующей матрицы
На самом деле список с результирующей матрицей можно получить за один проход на этапе 2, заявив что это способ представления такой.
Если же способ представления меняться не должен, то потребуются всякие извращения. В нашем случае список ABCDEF должен превратится в DAEBFC. Тупое решение в лоб - вытягивать в начало списка элементы по новому порядку. Т.е. какой элемент должен стоять в новой матрице в (0, 0)? Это (М-1,0) из старой, находим его в списке и перемещаем в начало.
Вот тут сложный вопрос - если в списке будут только значения из матрицы, то индексы мы можем определять только по положению элемента, значит вместо передвинутого надо вставлять какую-нибудь пустышку, чтобы порядок не менялся. Потом все пустышки не зыбыть удалить. Второй вариант - просто хранить координаты вместе со значением. Есть и третий вариант - каким-то образом учитывать уже перемещенные элементы, отсчитывая позицию, но тут уже надо повозится с деталями.