您的位置:首页 > 理论基础 > 数据结构算法

数据结构题典018:三个有序单链表求交(ANSI C)

2011-12-29 23:24 246 查看
题目:设有三个带头结点的元素按非递减有序排列的单链表A, B, C,对A进行如下操作,使A中仅含有三个表中的交,且没有值相同的结点,并释放无用结点。限定时间复杂度为O( m + n + p ),其中m, n, p分别为三个表的长度。

/*
* Intersection of three ordered linked lists.
*
* fduan, Dec. 29, 2011.
*/
void intersect_v2( link_list * lst_a, link_list lst_b )
{
node_ptr pa = *lst_a, pb = lst_b->next, p = NULL;
while( pa->next != NULL && pb != NULL )
{
if( pa->next->data < pb->data )
{
p = pa->next;
pa->next = p->next;
free( p );
}
else if( pa->next->data > pb->data )
{
pb = pb->next;
}
else
{
pa = pa->next;
pb = pb->next;
}
}

while( pa->next != NULL )
{
p = pa->next;
pa->next = p->next;
free( p );
}
}

void intersect_triple_lists( link_list * lst_a, link_list lst_b, link_list lst_c )
{
intersect_v2( lst_a, lst_b );
intersect_v2( lst_a, lst_c );
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: