链表创建及一系列操作
#include<bits/stdc++.h>
using namespace std;
typedef struct LNode{
int val;
struct LNode *next;
}*LinkList,LNode;
vector<int>a,b;
//尾插法创建链表
void create(LinkList &L,vector<int>&a){
int n=a.size();
L=new LNode;
L->next=NULL;
LNode *t,*p;
p=L;
for(int i=0;i<n;i++){
t=new LNode;
t->val=a[i];
t->next=NULL;
p->next=t;
p=t;
}
}
//遍历节点
void bianor(LinkList t){
while(t->next!=NULL){
cout<<t->next->val<<" ";
t=t->next;
}
}
//归并节点
LinkList merge(LinkList &t1,LinkList &t2){
LNode *p,*t;
p=new LNode;
p->next=NULL;
t=p;
LNode *t11=t1->next,*t22=t2->next;
while(t11&&t22){
if(t11->val<t22->val){
t->next=t11;
t=t11;
t11=t11->next;
}else{
t->next=t22;
t=t22;
t22=t22->next;
}
}
if(t11) t->next=t11;
if(t22) t->next=t22;
return p;
}
//删除节点使得不重复
LinkList deleteNode1(LinkList &t){
LinkList p=t->next;
while(p){
while(p->next!=NULL&&p->val==p->next->val) p->next=p->next->next;
p=p->next;
}
return t;
}
LinkList deleteNode2(LinkList &t){
//删除全部重复节点
LNode *p=t;
while(p->next){
auto q=p->next;
while(q&&p->next->val==q->val) q=q->next;
if(p->next->next==q)p=p->next;
else p->next=q;
}
return t;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
cin>>x;
a.push_back(x);
}
for(int i=1;i<=m;i++){
int x;
cin>>x;
b.push_back(x);
}
LinkList t1,t2;
create(t1,a);
create(t2,b);
//bianor(t1);
// bianor(t2);
LinkList t3=merge(t1,t2);
bianor(t3);
cout<<endl;
// LinkList t4=deleteNode(t3);
// bianor(t4);
LinkList t5=deleteNode2(t3);
bianor(t5);
}
// 5 6
// 1 2 5 8 15
// 2 3 4 5 6 7