已知两个排序相同的单链表A.B,合并成一个新链表C并且不改变它的排序性的算法.
答案:1 悬赏:80 手机版
解决时间 2021-03-28 22:21
- 提问者网友:情歌越听越心酸
- 2021-03-28 05:28
已知两个排序相同的单链表A.B,合并成一个新链表C并且不改变它的排序性的算法.
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-03-28 06:59
这是递增合并成递增,如果是递减,略加修改就可以了
需要按数据类型定义自行修改其中的内容
思路:
设待合并有头结点单链表为a 和b,合并到c
设置三个指针pa, pb 和pc 分别指向a, b 和c 的当前结点
开始时, pa, pb 和pc 分别指向a, b 和c 的头结点
pa 和pb 向后扫描,依次合并元素值小的结点到pc 的当前表尾,直到某个链表合并完毕
某链表归并完成后,需要处理另一个链表剩余的元素
void Merge(LinkList a, LinkList b, LinkList c)
{ // 单链表a 和b 元素不减,原地合并为递增有序链表c
Node *pa, *pb, *pc;
pa = a->next;
pb = b->next;
pc = c->next;
while (pa && pb)
{
if (pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb; // 追加剩余结点
free(a);
free(b);
}
需要按数据类型定义自行修改其中的内容
思路:
设待合并有头结点单链表为a 和b,合并到c
设置三个指针pa, pb 和pc 分别指向a, b 和c 的当前结点
开始时, pa, pb 和pc 分别指向a, b 和c 的头结点
pa 和pb 向后扫描,依次合并元素值小的结点到pc 的当前表尾,直到某个链表合并完毕
某链表归并完成后,需要处理另一个链表剩余的元素
void Merge(LinkList a, LinkList b, LinkList c)
{ // 单链表a 和b 元素不减,原地合并为递增有序链表c
Node *pa, *pb, *pc;
pa = a->next;
pb = b->next;
pc = c->next;
while (pa && pb)
{
if (pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb; // 追加剩余结点
free(a);
free(b);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯