各位,在C++单链表冒泡排序上有一个疑问

求助各位大虾,在C++单链表冒泡排序上有一个疑问
C/C++ code

struct node *bubble(struct node *phead,int len)
{
    struct node *ptr,*next;
    int temp;
     
    for(int i=0;i<len;i++)
    {
        ptr=phead;
        next=ptr->next;
        for(int j=len-i-1;j>0;j--)
        {
            if(ptr->data > next->data)
            {
                temp=ptr->data;
                ptr->data=next->data;
                next->data=temp;
            }
            ptr=ptr->next;
            next=next->next;
        }
    }
     
    return phead;
}


请问为什么交换节点的数据就可以达到冒泡排序的目的呢,我觉得交换了节点数据,但是地址没有变化啊,比如a有3个数据,其中一个数据和B的对调了,那么显示的时候不是会出错吗。
希望有耐心的朋友回答一下这个问题,谢谢

------解决方案--------------------
就像你说的,地址没有发生变化,只是那个地址保存的内容(即数据)发生了变化,以此达到排序的结果