读书人

链表的合并哪里不对求解。该如何处理

发布时间: 2012-04-18 15:01:59 作者: rapoo

链表的合并哪里不对,求解。

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;    }}


[解决办法]
第一个while循环,head指来指去的,到底想指哪里
这里应该是一个if,而不是while,确定头节点
另外,合并后的链表的头节点怎么输出?

C/C++ code
    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;
}
}

读书人网 >C++

热点推荐