Это именно то, что вы запрограммировали.
В случае if(x<l->value)
, что означает, что значение списка больше x
, тогда вы устанавливаете его на aux1
, что составляет mx
. Следовательно, большие значения заканчиваются mx
, а меньшие - Mx
.
Чтобы упростить такие ошибки, я рекомендую использовать более длинные и выразительные имена, например, smallerValues
и biggerValues
вместо mx
и Mx
. Кроме того, я не вижу смысла, почему вы копируете указатели mx
и Mx
в aux1
и aux2
. Вы можете просто использовать mx
и Mx
напрямую.
Кроме того, я думаю, ваш код не компилируется. Вы используете if(x>=l->valor)
, но LInt
не имеет члена valor
;)
Кроме того, это, вероятно, не будет выполняться для более чем одного элемента в каждом списке вывода. Вы устанавливаете aux1=&((*aux1)->next);
без инициализации next
. Следовательно, после этой инструкции aux1
просто указывает «куда-то».
Редактировать : Действительно, меня смутил указатель на определение типа, когда @David C. Rankin сказал:)
Вот переработанная, но полностью не проверенная версия:
typedef struct {
int value;
ListItem* next;
} ListItem;
void splitList(ListItem *inputList, int threshold, ListItem **smallerItems, ListItem **biggerItems) {
while(inputList) {
if(inputList->value < threshold) {
*smallerItems = (ListItem*)malloc(sizeof(ListItem));
(*smallerItems)->value = value;
smallerItems = &((*smallerItems)->next);
}
else {
*biggerItems = (ListItem*)malloc(sizeof(ListItem));
(*biggerItems)->value = value;
biggerItems = &((*biggerItems)->next);
}
inputList = inputList->next;
}
}