数据结构题典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 ); }
相关文章推荐
- 数据结构题典010:有序单链表的交集(ANSI C)
- 数据结构题典011:有序单链表的并集(ANSI C)
- 数据结构题典009:递归实现单链表逆序数出(ANSI C)
- 数据结构初学之判断单链表有序
- 数据结构题典002:删除单链表中最大元素所在结点(ANSI C)
- 数据结构 — 1. 两个非递减有序单链表合并为非递增有序单链表
- 数据结构题典006:有序表中冗余元素的删除(ANSI C)
- 数据结构题典014:单链表的子序列检测(ANSI C)
- 数据结构_两个有序单链表归并C语言源代码
- 数据结构题典001:有序线性表的归并(ANSI C)
- 【剑指offer】合并两有序单链表
- 第12周 数据结构和算法 线性表-8 单链表的定义及初始化
- 数据结构--单链表的插入
- LeetCode Merge k Sorted Lists(有序单链表数组的合并)
- 数据结构-单链表的实现
- 数据结构单链表的建立、删除
- Java 非递归 和非递归方法 实现两个有序单链表的合并
- 编程实现合并两个有序单链表
- 数据结构单链表创建(头插法,尾插法)java/c/c++
- 多线程编程题目:使用三个线程有序输出“1,2,3,1,2,3。。。”,其中线程1只输出1,线程2只输出2,线程3只输出3