В дополнение к Rishikesh Raje 's answer (вам нужно использовать указатель внутри struct: struct node* link;
; вам нужно проверить first for *Если 1008 * равно нулю, то получить доступ к link->data
), цикл можно немного упростить:
// advance only, if we need to insert (at least) after temp->link:
while(temp->link && temp->link->data <= num)
{
temp = temp->link;
}
// once the loop is done, temp points to the last element smaller than num, so:
r->link = temp->link;
temp->link = r;
В то же время нам не нужно проверять temp->data > num
;мы повторно вводим цикл только, если условие цикла было выполнено ранее, которое уже проверило именно это условие;остается самый первый цикл цикла;однако в этом случае ваш if
до того, как цикл уже охватил условие.
Примечание: требуется ли вставлять новые элементы после существующих?Если нет, вставка перед выполняется немного быстрее, все, что вам нужно сделать, это заменить <=
на <
и >
на >=
...