我正在编写一种用于作业的快速排序算法,但我想知道我的循环是否会过早停止。 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;
}
}
}
}
答案 0 :(得分:1)
链表中最后一个项目之后的项目的值是否为0?
根据定义,最后一个项目之后没有项目。如果最后一个项目之后有一个项目,那么之前的项目就不会是最后一个。
我想知道我的循环是否会过早停止。 while循环会经过最后一个元素吗
快速浏览一下,循环的所有分支都执行curr=curr->next
,并且循环结束条件为curr!=NULL
,因此循环将在next
为空的节点之后结束。如果列表的最后一个节点的next
指向null,则该循环不会越过它。 next
的最后一项之前的节点不能指向null,因此循环也不应该过早结束。
但是,如果列表最后一项的next
没有指向null,则循环不会在该节点上结束。
您应该使用调试器来验证程序的行为是否符合您的预期。