链表的合并哪里不对,求解。
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; }}
node* head = NULL; if (p1 && p2) { if (p1->data <= p2->data) { head = p1; p1 = p1->next; } else { head = p2; p2 = p2->next; } } node* tail = head; while (p1 && p2) { if (p1->data <= p2->data) { tail->next = p1; p1 = p1->next; } else { tail->next = p2; p2 = p2->next; } tail = tail->next; } while (p1 != NULL) { tail->next = p1; tail = tail->next; p1 = p1->next; } while (p2 != NULL) { tail->next = p2; tail = tail->next; p2 = p2->next; }
[解决办法]
void merge(node* p1, node* p2)
{
node* head = NULL,*pt = NULL;
if (p1 == NULL || p2 == NULL)
return;
if (p1->data <= p2->data)
{
head = p1;
pt = head;
p1 = p1->next;
}
else
{
head = p2;
pt = head;
p2 = p2->next;
}
while (p1 && p2)
{
if (p1->data <= p2->data)
{
pt->next = p1;
pt = pt->next;
p1 = p1->next;
}
else
{
pt->next = p2;
pt = pt->next;
p2 = p2->next;
}
}
while (p1 != NULL)
{
pt->next = p1;
pt = pt->next;
p1 = p1->next;
}
while (p2 != NULL)
{
pt->next = p2;
pt = pt->next;
p2 = p2->next;
}
}