#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreateList_H(LinkList &L,int n);//前插法
void CreateList_R(LinkList &L,int n);//尾插法
void PrintfList(LinkList L); // 输出
int ListDelete(LinkList &L,int i);// 删除
void inverse(LinkList &L); // 逆序单链表
void MergeList(LinkList &LA,LinkList &LB,LinkList&LC); //合并两个有序递增链表
int main()
{
LinkList L,L1;
int n,i;
cout<<"请输入链表元素个数(头插入法):";
cin>>n;
cout<<"请输入链表元素一: ";
CreateList_H(L,n);
PrintfList(L);
cout<<"请输入链表元素个数(尾插入法):";
cin>>n;
cout<<"请输入链表元素二: ";
CreateList_R(L1,n);
PrintfList(L1);
cout<<"请输入删除的元素位置(第一个输入的链表): ";
cin>>i;
ListDelete(L,i);
cout<<"删除后链表元素为: "<<endl;
PrintfList(L) ;
LinkList LA;
LinkList LB;
LinkList LC;
cout<<"请输入链表元素个数:";
cin>>n;
cout<<"请输入链表三: ";
CreateList_R(LA,n);
cout<<"请输入链表四:";
CreateList_R(LB,n);
MergeList(LA,LB,LC);
cout<<"合并后:"<<endl;
PrintfList(LC);
cout<<"请输入链表元素个数:";
cin>>n;
cout<<"请输入链表五:";
CreateList_R(L,n);
inverse(L);
cout<<"反转后:";
PrintfList(L);
return 0;
}
void CreateList_H(LinkList &L,int n)
{
LinkList p;
L=new LNode;
L->next=NULL;
for(int i=0;i<n;i++){
p=new LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
void CreateList_R(LinkList &L,int n){
LinkList p;
LNode *r;
L=new LNode;
L->next=NULL;
r=L;
for(int i=0;i<n;i++){
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
void PrintfList(LinkList L){
cout<<"链表元素为: ";
LNode *p;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int ListDelete(LinkList &L,int i){
LNode *p=L;
LNode *r;
int j=0;
while(p->next&&j<i-1){
p=p->next;
j++;
}
if(!(p->next)||j>i-1) return 0; //当 i>n或i<1时,删除出错。
r=p->next;
p->next=r->next;
delete r;
return 1;
}
void MergeList(LinkList &LA,LinkList &LB,LinkList&LC){
LNode *pa=LA->next;
LNode *pb=LB->next;
LC=LA;
LNode *r=LC;
while(pa&&pb){
if(pa->data<pb->data){
r->next=pa;
r=pa;
pa=pa->next;
}
else if(pb->data>pb->data){
r->next=pb;
r=pb;
pb=pb->next;
}
else{
r->next=pa;
r=pa;
pa=pa->next;
pb=pb->next;
}
}
r->next=pa?pa:pb;
delete LB;
}
void inverse(LinkList &L){
LNode *p=L->next->next;
LNode *q=L->next;
LNode *r=NULL;
while(p){
q->next=r;
r=q;
q=p;
p=p->next;
}
q->next=r;
L->next=q;
}
数据结构7:单链表的代码实现
猜你喜欢
转载自blog.csdn.net/GD_ONE/article/details/90757458
今日推荐
周排行