数据结构:两个有序单链表求差集

两个有序单链表求差集

前言

用于个人学习过程记录

题目

各依次输入递增有序若干个不超过100的整数,分别建立两个递增有序单链表,分别表示集合A和集合B。设计算法求出两个集合A和B 的差集
(即仅由在A中出现而不在B中出现的元素所构成的集合),并存放于A链表中。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。
然后输出求的差集的单链表。测试数据保证结果链表至少存在一个元素。

输入格式:
首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先在第一行输入数据个数n及n个依次递增有序的不超过100的整数,
再在第二行输入数据个数m及m个依次递增有序的不超过100的整数。

输出格式:
对于每组测试,输出A与B的差集的单链表,每两个数据之间留一个空格。

输入样例:

1
11 10 14 23 25 26 31 34 42 51 65 90
10 10 41 42 46 51 58 59 60 68 97

输出样例:

14 23 25 26 31 34 65 90

代码

#include<iostream>
using namespace std;
struct LNode{
	int data;
	LNode *next;
};
struct LinkList{
	LNode *head;
	void Init();
	void create(int n);
	void traveser();
};
void LinkList::Init(){
	head = new LNode;
	head->next=NULL;
}
void LinkList::create(int n){
	Init();
	LNode *q= head;
	while(n--){
		LNode *p =new LNode;
		cin>>p->data;
		p->next=q->next;
		q->next=p;
		q=p;
	}
}
void LinkList::traveser(){
	 LNode *p=head->next;
	 while(p){
	 	if(p!=head->next) cout<<" ";
	 	cout<<p->data;
	 	p=p->next;
	 }
	 cout<<endl;
}
void deleteList(LinkList La,LinkList Lb){
	for(LNode *p=La.head;p!=NULL;){
		bool flag = false;
		for(LNode *q=Lb.head->next;q!=NULL;q=q->next){
			if(p->next && p->next->data==q->data){
				LNode *r=p->next;
				p->next=r->next;
				delete r;
				flag = true;
				break;
			}
		}
		if(flag==false)p=p->next;
	}
}
int main(){
	int T;
	cin>>T;
	while(T--)
	{
		LinkList a,b;
		int n,m;
		cin>>n;	
		a.create(n);
		cin>>m;
		b.create(m);
		deleteList(a,b);
		a.traveser();
	}
}
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值