c++实现链表 增,删,查,合并
来源:互联网 发布:真正的绝望是什么知乎 编辑:程序博客网 时间:2024/06/03 04:20
#include <iostream>
# include<vector>
using namespace std;
struct linkList{
int data;
linkList* next;
};
linkList* createList(){//创建一个带头结点的链表,数据域记录链表长度,初始化为0
linkList* L=new linkList();
L->data=0;
L->next=NULL;
return L;
}
void insert(linkList*L,int elem){//插入一个节点
linkList* Pre=L;
linkList* P=L->next;
while(P!=NULL&&P->data<elem){//寻找插入位置
P=P->next;
Pre=Pre->next;
}
linkList* current=new linkList();//新建节点并且插入
current->data=elem;
Pre->next=current;
current->next=P;
L->data+=1;//链表长度加1
}
void deletel(linkList*L, int elem){
linkList* Pre=L;
linkList* P=L->next;
while(P->data!=elem){//查找删除位置
P=P->next;
Pre=Pre->next;
}
Pre->next=P->next;
delete(P);
L->data--;
}
void output(linkList*L){
cout<<"链表长度为:"<<L->data<<endl;
linkList* P=L->next;
cout<<"链表数据为:";
if(P==NULL){
cout<<"链表为空";
}
while(P){
cout<<P->data<<" ";
P=P->next;
}
cout<<endl;
}
linkList* check(linkList*L,int elem){
linkList* P=L->next;
while(P->data!=elem){//查找删除位置
P=P->next;
}
return P;
}
linkList* merge(linkList* L1,linkList* L2){
linkList* P1=L1->next;
linkList* P2=L2->next;
linkList* L3=new linkList();
linkList* cur=L3;
L3->data=L1->data+L2->data;
while(P1&&P2){
if(P1->data<P2->data){
cur->next=P1;
P1=P1->next;
cur=cur->next;
}
else{
cur->next=P2;
P2=P2->next;
cur=cur->next;
}
}
while(P1){
cur->next=P1;
P1=P1->next;
cur=cur->next;
}
while(P2){
cur->next=P2;
P2=P2->next;
cur=cur->next;
}
return L3;
}
int main()
{
linkList *L1=createList();
vector<int> a={1,2,3};
linkList *L2=createList();
vector<int> b={4,5,6};
for(int i=0;i<a.size();i++){
insert(L1,a[i]);
}
for(int i=0;i<b.size();i++){
insert(L2,b[i]);
}
output(L1);
output(L2);
output(merge(L1,L2));
return 0;
# include<vector>
using namespace std;
struct linkList{
int data;
linkList* next;
};
linkList* createList(){//创建一个带头结点的链表,数据域记录链表长度,初始化为0
linkList* L=new linkList();
L->data=0;
L->next=NULL;
return L;
}
void insert(linkList*L,int elem){//插入一个节点
linkList* Pre=L;
linkList* P=L->next;
while(P!=NULL&&P->data<elem){//寻找插入位置
P=P->next;
Pre=Pre->next;
}
linkList* current=new linkList();//新建节点并且插入
current->data=elem;
Pre->next=current;
current->next=P;
L->data+=1;//链表长度加1
}
void deletel(linkList*L, int elem){
linkList* Pre=L;
linkList* P=L->next;
while(P->data!=elem){//查找删除位置
P=P->next;
Pre=Pre->next;
}
Pre->next=P->next;
delete(P);
L->data--;
}
void output(linkList*L){
cout<<"链表长度为:"<<L->data<<endl;
linkList* P=L->next;
cout<<"链表数据为:";
if(P==NULL){
cout<<"链表为空";
}
while(P){
cout<<P->data<<" ";
P=P->next;
}
cout<<endl;
}
linkList* check(linkList*L,int elem){
linkList* P=L->next;
while(P->data!=elem){//查找删除位置
P=P->next;
}
return P;
}
linkList* merge(linkList* L1,linkList* L2){
linkList* P1=L1->next;
linkList* P2=L2->next;
linkList* L3=new linkList();
linkList* cur=L3;
L3->data=L1->data+L2->data;
while(P1&&P2){
if(P1->data<P2->data){
cur->next=P1;
P1=P1->next;
cur=cur->next;
}
else{
cur->next=P2;
P2=P2->next;
cur=cur->next;
}
}
while(P1){
cur->next=P1;
P1=P1->next;
cur=cur->next;
}
while(P2){
cur->next=P2;
P2=P2->next;
cur=cur->next;
}
return L3;
}
int main()
{
linkList *L1=createList();
vector<int> a={1,2,3};
linkList *L2=createList();
vector<int> b={4,5,6};
for(int i=0;i<a.size();i++){
insert(L1,a[i]);
}
for(int i=0;i<b.size();i++){
insert(L2,b[i]);
}
output(L1);
output(L2);
output(merge(L1,L2));
return 0;
}
运行效果如下
阅读全文
0 0
- c++实现链表 增,删,查,合并
- c++实现双向有序链表的,增,删,查,合并
- c语言实现链表的创建、增、删、改、查
- java 顺序表实现增删改查,合并,排序功能
- 数据结构(c语言版)链表的实现以及合并
- c语言-指针实现链表增删改查
- C语言实现双向链表,增删改查,排序
- C语言:链表的创建、增、删、查
- java实现单向链表的增、删、改、查
- 链表的增,删,改,查实现
- 循环链表实现增、删、改、查等功能
- C语言实现合并排序
- 单链表合并(c实现)
- 合并排序C语言实现
- 纯c语言实现链表,实现链表增删改查
- PAT 2-11 两个有序链表序列的合并(C语言实现)
- 合并两个有序链表 (C++)
- 递归合并有序链表C语言
- Redis和Memcached的区别
- (JAVA)日期计算 -201509-2
- 安装Mysql5.7并修改初始密码
- C++(qt)游戏实战项目:坦克大战(三)
- 关于L1和L2的一些思考
- c++实现链表 增,删,查,合并
- Java使用redis+sse实现带频道的网络聊天室
- # Volley之NetWorkImageView的源码解析与用法:
- 用户用户组配置文件相关文件格式说明
- bisonExe was not found
- 高次方尾数
- 通讯录——(C语言文件版本)
- (16)spring boot中集成Redis实例
- 第二十天 init初始化servlet,查询注入给Servlet的参数值