这段代码有什么问题?

//假设链表是1234567 最后输出为什么是17654321 7654321 7654321
//最前面多一个1.没有其他输出函数
linklist  reverse(linklist head)
{
    /*头插法 head断开再头插接收*/
    linklist p,q;
    p=head->next;  //head后第一个有效节点
    head->next=NULL;  //置空头节点
    
    q=p->next;
    /*逆序插入*/
    while(p->next!=NULL)   
    {
        p->next=head;
        head=p;
        p=q;   
        q=q->next; //pq同时移动遍历

    }
    p->next=head;   //当p在最后位置时,
    head=p;
    
    return head;
}

在逆序插入的 while 循环中,当 p 到达最后一个节点时,由于 p->next 为 NULL,循环终止,而最后一个节点并没有加入链表,因此需要在循环结束后再添加最后一个节点。修改后的代码如下:

linklist reverse(linklist head) {
    linklist p = head->next;
    head->next = NULL;
    while (p != NULL) {
        linklist q = p->next;
        p->next = head;
        head = p;
        p = q;
    }
    return head;
}