概述
文章目录
- 1 例题
- 2 链表合并另一种思路[参考文章,请点击](https://blog.csdn.net/weixin_39916039/article/details/80516790#commentBox)
1 例题
#include <bits/stdc++.h>
using namespace std;
typedef int ElemType;
typedef struct ListNode
{
int val;
ListNode *next;
//ListNode(int x):val(x),next(NULL){}
}ListNode;
typedef struct ListNode *LinkList;
void Create(LinkList *L ,int EndTag);
int locate_elem(LinkList L ,ElemType e);
void Insert_elem(LinkList *L,int i,ElemType e);
void Delete_elem(LinkList *L,ElemType e);
void inter_sec(LinkList *A,LinkList *B);
void uni(LinkList *A,LinkList *B);
void show_afterSort(LinkList A);
int main()
{
//freopen("1.txt","r",stdin);
std::ios::sync_with_stdio(false);
int end_tag;
cin>>end_tag;
LinkList A_;
LinkList B_;
Create(&A_,end_tag);
LinkList pa=A_;
pa=pa->next;
cout<<"A is created as: ";
while(pa)
{
cout<<pa->val<<" ";
pa=pa->next;
}
cout<<endl;
int ind;
int ele;
cin>>ind>>ele;
Insert_elem(&A_,ind,ele);
int elem;
cin>>elem;
Delete_elem(&A_,elem);
int find_ele;
cin>>find_ele;
locate_elem(A_,find_ele);
int not_find;
cin>>not_find;
locate_elem(A_,not_find);
int end_tag2;
cin>>end_tag2;
Create(&B_,end_tag2);
LinkList pb=B_;
pb=pb->next;
cout<<"B is created as: ";
while(pb)
{
cout<<pb->val<<" ";
pb=pb->next;
}
cout<<endl;
inter_sec(&A_,&B_);
uni(&A_,&B_);
show_afterSort(A_);
free(A_);
free(B_);
return 0;
}
/*
* 建立 带 表头结点的单线性链表L(尾插法)
* L为头结点
*/
void Create(LinkList *L ,int EndTag)
{
LinkList p,r;
int tmp;
cin>>tmp;
*L=(LinkList)malloc(sizeof(ListNode));
r=*L;//r为指向尾部的节点
while(tmp!=EndTag)
{
p=(ListNode*)malloc(sizeof(ListNode));//产生新节点
p->val=tmp;
/*尾插法*/
r->next=p;
r=p;
cin>>tmp;
}
r->next=NULL;//表示当前链表结束
}
/* 寻找元素,并返回在链表中的位置
* 在指定链表L(注意没用LinkList *L,By value,非By reference)里面寻找elem
*
*/
int locate_elem(LinkList L ,ElemType e)
{
int i=0;
LinkList tmp;
tmp=L->next;
while(tmp)
{
i++;
if(e==tmp->val)
{
cout<<e<<" is located at index of "<<i<<endl;
return 1;
}
tmp=tmp->next;
}
cout<<e<<" is not found"<<endl;
return 0;
}
/*
* 插入元素,向*L这个链表插入元素
* By reference,函数参数传递地址,以便在主函数里面可以修改链表
*
*/
void Insert_elem(LinkList *L,int i,ElemType e)//By reference,函数参数传递地址,以便在主函数里面可以修改链表
{
LinkList tmp;
tmp=*L;
//tmp=tmp->next;//tmp这个时候是第一个元素
int j=1;
while(tmp&&j<i)
{
j++;
tmp=tmp->next;
}
//tmp这个时候就是链表第i个元素,开始插入
LinkList inse;
inse=(LinkList)malloc(sizeof(ListNode));//产生新节点
inse->val=e;
inse->next=tmp->next;
tmp->next=inse;//巨他妈呢坑
LinkList p=*L;
p=p->next;
cout<<"After inserted A is ";
while(p)
{
cout<<p->val<<" ";
p=p->next;
}
cout<<endl;
}
/*
** 删除链表*L中的元素,函数参数By reference
*/
void Delete_elem(LinkList *L,ElemType e)
{
LinkList tmp;
tmp=*L;//tmp这个时候是链表的第一个元素
LinkList q;//用来回收被删除的节点
while(tmp->next)
{
if(tmp->next->val==e)
{
q=tmp->next;
tmp->next=q->next;
free(q);//而不是free(tmp->next)
break;
}
tmp=tmp->next;
}
LinkList p=*L;
p=p->next;
cout<<"After deleted A is ";
while(p)
{
cout<<p->val<<" ";
p=p->next;
}
cout<<endl;
}
/*
* 求交集,链表A和B,修改了链表A和B
*
*
*/
void inter_sec(LinkList *A,LinkList *B)
{
LinkList a_tmp=*A;
LinkList b_tmp=*B;
a_tmp=a_tmp->next;
//b_tmp=b_tmp->next;
vector<int> arr;//存储交集
while(a_tmp)
{
while(b_tmp->next)
{
if(b_tmp->next->val==a_tmp->val)
{
arr.push_back(a_tmp->val);
LinkList p=b_tmp->next;
b_tmp->next=p->next;
free(p);
break;
}
b_tmp=b_tmp->next;
}
a_tmp=a_tmp->next;
}
sort(arr.begin(),arr.end());
cout<<"A cross B is ";
for(int i=0;i<=arr.size()-1;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
/*
* 求并集,
* 修改A和B, By reference
*
*/
void uni(LinkList *A,LinkList *B)
{
LinkList a_tmp=*A;
LinkList b_tmp=*B;
a_tmp=a_tmp->next;
b_tmp=b_tmp->next;
while(a_tmp->next)//巨他妈坑
a_tmp=a_tmp->next;
a_tmp->next=b_tmp;
LinkList a_tmp2=*A;
cout<<"A union B is ";
a_tmp2=a_tmp2->next;
while(a_tmp2)
{
cout<<a_tmp2->val<<" ";
a_tmp2=a_tmp2->next;
}
cout<<endl;
}
void show_afterSort(LinkList A)
{
vector<int> arr;
LinkList p=A->next;
while(p)
{
arr.push_back(p->val);
p=p->next;
}
sort(arr.begin(),arr.end());
cout<<"A union B in sequence is ";
for(int i=0;i<=arr.size()-1;i++)
cout<<arr[i]<<" ";
}
2 链表合并另一种思路参考文章,请点击
最后
以上就是花痴豆芽为你收集整理的链表的集合交集与并集1 例题2 链表合并另一种思路参考文章,请点击的全部内容,希望文章能够帮你解决链表的集合交集与并集1 例题2 链表合并另一种思路参考文章,请点击所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复