|
算法填空:A,B为升序的带头结点的单链表,将B合并到A中。
链表:A ->1->2->3
链表:B ->3->4->5
合并A和B,并把B中重复的结点释放。
结果:A->1->2->3->4->5。
typedef struct node {
int data;
struct node *next;
}linknode, *link;
void union(link A, link B)
{
link q,p,p1,u;
q=B->next;
free(B);
p1=A->next;
while(_________________)
{
p=p1;
while(_____________)
{
p=p->next;
}
if(___________)
{
u=q->next;
___________;
___________;
q=u;
}
else
{
u=q;
________;
free(u);
}
}
}
那么,至此为止#32楼的coding3215的答案好象是唯一的解,解题的思路是:
BEGIN
1。循环B链表。
2。查找B中是否有A的重复节点
2.1如有,则释放B的重复节点。
2.2.1如无重复,则找到插入位置的前节点
2.2.2插入节点。
END
填空答案为:
1。q
2。 p && q->data != p->data
3。!p
4。for (p = A; p->next && p->next->data < q->data; p = p->next);
5。 q->next = p->next, p->next = q;
6。q = q->next;
还有没有其它的方法呢?从程序的其它语句中来看,主要是把人的思路引导到这个结果上来,但还是有点忐忑第四和第五个空儿。
还有可能有多的答案吗?
[ 本帖最后由 liuboo 于 2008-6-27 16:22 编辑 ]
|