链表中最后一个项目之后的项目的值是否为0?

时间:2019-03-06 20:14:40

标签: c++ linked-list quicksort

我正在编写一种用于作业的快速排序算法,但我想知道我的循环是否会过早停止。 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 个答案:

答案 0 :(得分:1)

  

链表中最后一个项目之后的项目的值是否为0?

根据定义,最后一个项目之后没有项目。如果最后一个项目之后有一个项目,那么之前的项目就不会是最后一个。

  

我想知道我的循环是否会过早停止。    while循环会经过最后一个元素吗

快速浏览一下,循环的所有分支都执行curr=curr->next,并且循环结束条件为curr!=NULL,因此循环将在next为空的节点之后结束。如果列表的最后一个节点的next指向null,则该循环不会越过它。 next的最后一项之前的节点不能指向null,因此循环也不应该过早结束。

但是,如果列表最后一项的next没有指向null,则循环不会在该节点上结束。

您应该使用调试器来验证程序的行为是否符合您的预期。