我是靠谱客的博主 包容小馒头,最近开发中收集的这篇文章主要介绍java如何写链表的差集_基于链表的两个集合的差集,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

描述

给定两个递增的整数集合,分别用链表A和B表示,求出A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。要求空间复杂度为O(1)。

输入

多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为序列B的m个元素(元素之间用空格分隔)。n=0且m=0时输入结束。

输出

对于每组数据输出两行,第一行是A和B的差集,第二行为差集中的元素个数,每个数据之间用空格分隔。

输入样例 1

5 5

1 3 5 7 9

1 2 3 4 5

3 4

1 2 6

2 4 5 7

0 0

输出样例 1

7 9

2

1 6

2

#include

using namespace std;

typedef struct LNode{

int data;

struct LNode *next;

}LNode,*LinkList;

void InitList(LinkList &L)

{

L=new LNode;

L->next=NULL;

return;

}

void CreateList_R(LinkList &L,int n)

{

int i;

LinkList r=L;

LinkList p;

for(i=0;i

{

p=new LNode;

int data;

cin>>data;

p->data=data;

p->next=NULL;

r->next=p;

r=p;

}

return;

}

void Show(LinkList &L)

{

LinkList p=L->next;

while(p){

cout<data;

if(p->next) cout<

p=p->next;

}

cout<

return;

}

int ListLength(LinkList L)

{

LinkList p;

p=L->next; //p指向第一个结点

int i=0;

while(p){//遍历单链表,统计结点数

i++;

p=p->next;

}

cout<

}

void Diff(LinkList &A,LinkList &B)

{

LinkList pc=A,pa=A->next,pb=B->next;

while(pa&&pb)

{

if(pa->data==pb->data)

{

pa=pa->next;

pb=pb->next;

}

else if(pa->data > pb->data)

{

pb=pb->next;

}

else if(pa->data < pb->data)

{

pc->next=pa;

pa=pa->next;

pc=pc->next;

}

if(!pb)pc->next=pa;

}

Show(A);

ListLength(A);

return;

}

void Create2List(LinkList &A,LinkList &B,int &n,int &m)

{

CreateList_R(A,n);

CreateList_R(B,m);

return;

}

int main()

{

int n,m;

cin>>n>>m;

while(n!=0&&m!=0)

{

LinkList A,B;

InitList(A);

InitList(B);

Create2List(A,B,n,m);

Diff(A,B);

cin>>n>>m;//key

}

return 0;

}

最后

以上就是包容小馒头为你收集整理的java如何写链表的差集_基于链表的两个集合的差集的全部内容,希望文章能够帮你解决java如何写链表的差集_基于链表的两个集合的差集所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部