数据结构题典010:有序单链表的交集(ANSI C)

55 篇文章 0 订阅
37 篇文章 0 订阅

题目:设有两个非递减有序的单链表,编写算法求二者的交集(以链表形式存放),要求交集中元素保持递增有序。

分析:此题关键是要跳过相邻的重复元素。

/*
 * Intersection of two non-descending linked lists.
 *
 * fduan, Dec. 28, 2011.
 */
void intersection( link_list lst_a, link_list lst_b, link_list * lst_i )
{
	node_ptr pa = lst_a->next, pb = lst_b->next, s = NULL, p = NULL;
	int e1, e2;

	init_llist( lst_i );
	p = *lst_i;

	while( pa != NULL && pb != NULL )
	{
		if( pa->data < pb->data )
			pa = pa->next;
		else if( pa->data > pb->data )
			pb = pb->next;
		else
		{
			s = ( node_ptr )malloc( sizeof( node ) );
			s->data = pa->data;
			s->next = NULL;
			p->next = s;
			p = s;
			
			e1 = pa->data; 
			e2 = pb->data;
			
			pa = pa->next;
			pb = pb->next;

			while( pa != NULL && pa->data == e1 )
				pa = pa->next;

			while( pb != NULL && pb->data == e2 )
				pb = pb->next;
		}
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值