假设有两个按元素值递增有序排列的带头节点的单链表A和B.试编写算法将A表和B表归并成按一个元素值递减有序(允许值下相同)排列的线性表C,要求利用原表的节点空间存放C
题目
假设有两个按元素值递增有序排列的带头节点的单链表A和B.试编写算法将A表和B表归并成按一个元素值递减有序(允许值下相同)排列的线性表C,要求利用原表的节点空间存放C
答案
/* 链表节点 */
typedef struct Node {
int data;
struct Node *next;
} Node;
/* 合并两个升序链表为降序链表 */
Node *merge_lists(Node *a, Node *b)
{
Node *pa = a->next, *pb = b->next, *t;
/* 新链表的头结点使用 a 的头结点 */
a->next = NULL;
free(b); // b 的头结点是不需要的,可以释放掉
while(pa != NULL && pb != NULL) {
if(pa->data < pb->data) { // 将 pa 插入新链表头部
t = pa->next;
pa->next = a->next;
a->next = pa;
pa = t;
} else { // 将 pb 插入新链表头部
t = pb->next;
pb->next = a->next;
a->next = pb;
pb = t;
}
}
/* 注:以下两个循环只会执行其中一个 */
/* 只剩链表 a 的节点 */
while(pa != NULL) {
t = pa->next;
pa->next = a->next;
a->next = pa;
pa = t;
}
/* 只剩链表 b 的节点 */
while(pb != NULL) {
t = pb->next;
pb->next = a->next;
a->next = pb;
pb = t;
}
return a;
}
有问题请指教 :)
举一反三
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
最新试题
- 把一个质量为1kg的物体放在水平面上,用8N的水平拉力使物体从静止开始运动,物体与水平面的动摩擦因数为0.2,物体运动2s时撤掉拉力.(g取10m/s2)求: (1)2s末物块的动能. (2)2s后物
- 什么是有机农业 有机农业的特点和标准
- I will never forget the people and the things ___ I saw during my stay in Europe.
- 一张纸,第一次用去5分之2,第二次用去2分之1.第二次比第一次多用去整张纸的几分之几?
- 4分之1=12分之( )=36分之( )=( )分之7=( ) 分之( )
- Thanks for acting like you
- Japanese的复数形式要加s吗?
- 有甲、乙两种糖果共50千克,售价分别为20元/千克和24元/千克,
- 把3/4L橙汁分装在容量是1/4L的小瓶里,可以装几瓶?
- 请展开联想和想象,运用恰当的修辞方法,将月亮(颜色),树影,琴声三个词语扩展成一段话,描写一幅画面
热门考点