C 中优先队列的小混淆

Little confusion in Priority Queue in C

我是这样写代码的:

ptr=front;
    while(ptr->link!=NULL && ptr->priority<itempriority ){
        ptr=ptr->link;
    }

    temp->link=ptr->link;
    ptr->link=temp;
    return front;

以上代码无效。

  ptr=front;
        while(ptr->link!=NULL && ptr->link->priority<itempriority ){
            ptr=ptr->link;
        }

        temp->link=ptr->link;
        ptr->link=temp;
        return front;

此代码运行完美。

我很困惑为什么我的代码不起作用,即 ptr->priority<itempriority ?

简而言之,我想知道 ptr->link->priority<itempriority 是如何完美运行而 ptr->priority<itempriority 不是?

考虑这个

1 -> 2 -> 5 -> 8

并且您想在正确的位置插入 3

while(ptr->link!=NULL && ptr->priority<itempriority ){
        ptr=ptr->link;
    }

最后,ptr 会指向 5。最后你会得到

1 -> 2 -> 5 -> 3 -> 8 //Wrong

第二个版本

while(ptr->link!=NULL && ptr->link->priority<itempriority ){
            ptr=ptr->link;
        }

最后ptr2,最后

1 -> 2 -> 3 -> 5 -> 8 //correct