首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-18 
链表的合并哪里不对,求解。C/C++ codevoid merge(node* p1, node* p2){if (p1 NULL || p2 NULL)retur

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

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

热点排行