这个链表归并哪里有有关问题,求解

这个链表归并哪里有问题,求解
C/C++ code
void merge(node* p1, node* p2)
{
    if (p1 == NULL || p2 == NULL)
        return;

    node* head = NULL;
    while (p1 && p2)
    {    
        if (p1->data <= p2->data)
        {
            head = p1;
            p1 = p1->next;
        }
        else
        {
            head = p2;
            p2 = p2->next;
        }
    }
    while (p1 != NULL)
    {
        head->next = p1;
        p1 = p1->next;
    }
    while (p2 != NULL)
    {
        head->next = p2;
        p2 = p2->next;
    }
}


------解决方案--------------------
因为你没有修改游标head的next值,所以导致出现了问题。
C/C++ code

void merge(node* p1, node* p2)
{
    if (p1 == NULL || p2 == NULL)
        return;

    node* head = NULL;
    node* pt = NULL;
    if (p1->data <= p2->data)
   {
         head = p1;
         p1 = p1->next;
     }
    else
     {
          head = p2;
          p2 = p2->next;
      }
      pt = head;
    while (p1 && p2)
    {    
        if (p1->data <= p2->data)
        {
            pt->next = p1;
            pt = p1;
            p1 = p1->next;
        }
        else
        {
            pt->next = p2;
            pt = p2;
            p2 = p2->next;
        }
    }
    while (p1 != NULL)
    {
        pt->next = p1;
        pt = p1;
        p1 = p1->next;
    }
    while (p2 != NULL)
    {
        pt->next = p2;
        pt = p2;
        p2 = p2->next;
    }
}