关于两条升序的链表,合并成一条新的升序链表; if函数底下的tail已经指向了q,为什么while里面的函数让tail->next继续指向q

plist *merge(plist *ah,plist *bh) //合并函数
{
plist *head,*tail,*p=ah,*q=bh,*ptemp;
if(ah==NULL)return bh;
if(bh==NULL)return ah;
tail=p;
if(p->no>q->no)
tail=q;
while(NULL!=p&&NULL!=q)
{
if(p->no<=q->no)
{
ptemp=p;p=p->next;
}
else
{
ptemp=q;q=q->next;
}
tail->next=ptemp;tail=ptemp;
}
if(NULL==p)
{
p=q;
}
ptemp=p;
tail->next=ptemp;
return head;
}

tail是个指针。tail->next=q;表示tail当前指向的节点的next域等于q,
tail = q表示tail这个指针指向了q