链式队列中front->next为何能自己指向链表

问题遇到的现象和发生背景

链式队列中头指针的next什么时候改变的

问题相关代码,请勿粘贴截图

void InitQueue(LinkQueue &Q){
Q.head=Q.rail=(LNode *)malloc(sizeof(LNode));
Q.head->next=NULL;
}
void InsertQueue(LinkQueue &Q,Elemtype ele){
LNode p=(LNode)malloc(sizeof(LNode));
p->data=ele;
printf("插入成功\n");
p->next=NULL;
Q.rail->next=p; //尾指针指向的结点的指针域指向P 在这句代码之前 变量Q.head->next 一直等于0X0 执行完这段代码后 其跟rail->next的值一致了 求解
Q.rail=p; //尾指针定位到P
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

申请了一块内存,head和rail同时指向这块内存,你改变rail指向的内容,其实也就是head同样改变

img

因为在新建链表的时候头指针和尾指针是同一个位置
所以第一次新链表节点时Q.rail->next=p; 时,头指针和尾指针的next都指向p;
然后 Q.rail=p; //尾指针定位到P
此时头指针和尾指针的位置就不同了
所以之后第二次第三次等以后新链表节点时Q.rail->next=p; 时,就只有尾指针的next 指向p;