版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/83795866
一、考研真题
3、写一个算法,将单链表中值重读的结点删除,使所得的结果表中个结点值均为不相同(假设单链表中包含一个头结点)。(6分)
4、设有两个证书集合A和B,分别用递增有序链表表示,设计一个算法实现两个集合的交运算,运算结果也用递增有序链表表示。运算后,A、B两个链表保持不变。(8分)
二、真题解析
3、写一个算法,将单链表中值重读的结点删除,使所得的结果表中个结点值均为不相同(假设单链表中包含一个头结点)。(6分)
void Delete(LNode* &L)
{
LNode *p,*q,*s;
p = L->next;
while (p->next&&p->next->next)
{
q = p;
while (q->next)
{
if (p->data==q->next->data)
{
s = q->next;
q->next = s->next;
//free等价于后面两句,课本上为了便于理解写的伪代码,考试写free或者delete s;s=NULL;都可以
//free(s);
delete s;
s = NULL;
}
else
{
q = q->next;
}//if
}//while
p = p->next;
}
}
4、设有两个证书集合A和B,分别用递增有序链表表示,设计一个算法实现两个集合的交运算,运算结果也用递增有序链表表示。运算后,A、B两个链表保持不变。(8分)