Это проблема домашних заданий, так вместо того, чтобы прямо писать код, я первым указать, где вы пошло не так.
В алгоритме сортировки, подобном вставке, очевидно, что требуется некоторая замена, которая должна выполняться между неуместными элементами (которые необходимо вставить). Поэтому начните с размышления о том, как вы можете поменять два элемента массива. Обратите особое внимание на случаи, когда один из них является голова или один хвост.
В вашем реализованном коде нет следов указателей, поэтому здесь вы ошибаетесь.
Далее вы должны подумать о случаях, когда нам нужно сортировать. В этом случае это довольно просто. Если текущий элемент и следующий находятся в отсортированном порядке (при условии возрастания, текущий < следующий). Тогда ничего не нужно делать, а просто сделать следующий поток.
Тогда вы, очевидно, можете заключить, что нарушение этого случая происходит, когда вам нужно поменять элементы. После обмена (с должным вниманием к тому, где указатели были и будут после сортировки), повторите процесс, пока не нажмете нулевую стену.
P.S: Это возможный дубликат другого вопроса.
Поиск похожих вопросов, подобных этому _ [здесь] (http://stackoverflow.com/questions/16426104/insertion-sort-linked-list-c) _, чтобы помочь вам понять. – miqid
Fwiw. Это также не делает сортировку вставки (или действительно любую другую описываемую сортировку). По его определению, вставка-сортировка представляет собой сложность O (NlogN) именно потому, что в нижнем сегменте используется двоичный поиск для определения места следующего элемента, который должен быть вставлен в уже отсортированную подпоследовательность, задача не слишком простая со связанными списки, но тривиально с контейнерами с произвольным доступом. – WhozCraig