11.16线性表A,B顺序存储合并
#include<iostream> #include<cstring> using namespace std; typedef struct f{ int data; f* next; }node,*Node; void build(f *p){ int x; while(cin>>x&& x != -1){ f *now=new node(); now->data=x; now->next=p->next; p->next=now; } } void build(Node p1,Node p2,Node p3){ p1=p1->next; p2=p2->next; while(p1!=NULL&&p2!=NULL){ if(p1->data<=p2->data){ Node now=new node(); now->data=p1->data; now->next=p3->next; p3->next=now; p3=p3->next; p1=p1->next; } else{ Node now=new node(); now->data=p2->data; now->next=p3->next; p3->next=now; p3=p3->next; p2=p2->next; } } while(p1!=NULL){ Node now=new node(); now->data=p1->data; now->next=p3->next; p3->next=now; p3=p3->next; p1=p1->next; } while(p2!=NULL){ Node now=new node(); now->data=p2->data; now->next=p3->next; p3->next=now; p3=p3->next; p2=p2->next; } } void flush(Node p){ if(p)p=p->next; Node pre=p; if(p)p=p->next; while(p!=NULL){ if(p->data==pre->data){ pre->next=p->next; Node k=p; p=p->next; delete k; } else{ pre=p; p=p->next; } } } void show(Node p){ p=p->next; while(p!=NULL){ cout<<p->data; p=p->next; if(p!=NULL) cout<<','; } } int main(){ Node p1=new node(); p1->next=NULL; build(p1); Node p2=new node(); p2->next=NULL; build(p2); Node p3=new node(); p3->next=NULL; build(p1,p2,p3); flush(p3); show(p3); return 0; }
先定义结构体包括data,next;再new两个新链表build插入相应的数(尾插法);再建一个build函数来处理这两个链表,对比这两个链表中的结点大小,小的存储进新的链表p3中,最后如果链表p1,p2哪个还剩下结点,直接插入p3中(尾插法);最后判断p3中重复的结点并删除,最后输出链表。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示