Имеет ли элемент после последнего элемента в связанном списке значение 0? - PullRequest
0 голосов
/ 06 марта 2019

Я пишу алгоритм быстрой сортировки для домашней работы, но мне было интересно, остановится ли мой цикл слишком рано.Будет ли цикл while проходить мимо последнего элемента и останавливаться или он будет продолжать читать случайные числа, оставшиеся в памяти?Это имеет смысл?

void ListP::partition(ListNode * &Larger, ListNode * &Smaller, ListNode * &pivot ){
    ListNode *curr, *temps, *templ; *temps= *templ = NULL;
    curr=pivot->next;
    pivot->next=NUll;
    while(curr!=NULL){
        if (curr->item<=pivot->item){
            if(Smaller==NULL){
                Smaller=curr;
                curr=curr->next;
                Smaller->next=NULL;
                temps=Smaller;
            }
            else{
                temps->next=curr;
                curr=curr->next;
                temps=temps->next;
                temps->next=NUll;
            }
        }
        else{
            if(Larger==NULL){
                Larger=curr;
                curr=curr->next;
                Larger->next=NULL;
                templ=Larger;
            }
            else{
                templ->next=curr;
                curr=curr->next;
                templ=templ->next;
                templ->next=NUll;
            }
        }
    }
}

1 Ответ

1 голос
/ 06 марта 2019

Имеет ли элемент после последнего элемента в связанном списке значение 0?

По определению, после последнего элемента нет элемента.Если после последнего элемента был элемент, то предыдущий не был бы последним.

Мне было интересно, остановится ли мой цикл слишком рано.Пройдет ли цикл while мимо последнего элемента

Беглый взгляд, все ветви цикла выполняют curr=curr->next, а условие окончания цикла равно curr!=NULL, поэтому цикл завершится послеузел, чей next является нулевым.Если next последнего узла вашего списка указывает на ноль, то цикл не должен проходить мимо него.next узла перед последним элементом не может указывать на ноль, поэтому цикл также не должен заканчиваться слишком рано.

Однако, если next последнего элемента списка не указывает наnull, тогда цикл на этом узле не закончится.

Вы должны убедиться, что программа ведет себя так, как вы ожидаете, используя отладчик.

...