有两个集合采用整数单链表A、B存储设计一个算法求两个集合的并集CC仍然用单链表存储并给出算法的时间和空间复杂度。例如 A=132B=5142并集C=13254。
算法步骤:
- 先将A、B两个链表中的元素按从小到大的顺序排序,可以使用插入排序或归并排序等算法;
- 从A、B两个链表的头部开始,分别比较两个链表中的元素大小,将较小的元素插入到C链表中;
- 如果A链表当前元素比B链表当前元素小,则将A链表的下一个元素与B链表的当前元素继续比较,直到A链表遍历完或B链表遍历完;
- 如果B链表当前元素比A链表当前元素小,则将B链表的下一个元素与A链表的当前元素继续比较,直到B链表遍历完或A链表遍历完;
- 如果A、B链表中有相同的元素,则只将其中一个元素插入到C链表中,即可保证C链表中没有重复元素;
- 将A、B链表中剩余的元素依次插入到C链表中;
- 返回C链表。
时间复杂度:排序的时间复杂度为O(nlogn),遍历链表的时间复杂度为O(n),因此总的时间复杂度为O(nlogn+n)=O(nlogn)。
空间复杂度:除了C链表外,只需要使用常数个额外的变量,因此空间复杂度为O(1)。
原文地址: https://www.cveoy.top/t/topic/bpJ3 著作权归作者所有。请勿转载和采集!