代码简要:本篇文章讲述了单链表的创建,插入,删除,以及得到某个位置值等的操作
谢谢大家的支持。
//测试时需要输入10个数据进行测试
#include<iostream>
#include<cstdio>
using namespace std;
typedef struct lnode{
int data;
struct lnode *next;
}lnode,*linklist;
void creatlist(linklist &l,int n){
l=(linklist) malloc(sizeof(lnode));
l->next=NULL;//建立一个带头结点的链表
for(int i=1;i<=n;i++){
linklist p;
p=(linklist)malloc(sizeof(lnode));//C语言中动态分配内存的方法
cin>>p->data;
p->next=l->next;//先让p指向l的下一个指针域
l->next=p;//然后用l指向p。
}
}//创建一个链表,并且输入数据。
int listinsert(linklist &l,int i,int e){
linklist p;
p=l;
int j=0;
while(p&&j<i-1){//寻找第i-1个结点
p=p->next;
j++;
}
if(!p||j>i-1){//如果没有寻找到或者超出范围则退出
return 0;
}
linklist s;//创建结点
s=(linklist)malloc(sizeof(lnode));//建立即将插入的新节点
s->data=e;
s->next=p->next;//插入操作,先将p的下一个指针域赋值给s
p->next=s;//然后让s为p的下一个指针域
return 1;//进行头插所以数据是相反的。
}//在链表中将进行插入操作
int listdelete(linklist &l,int i){
linklist p;
p=l;
int j=0;
while(p->next&&j<i-1){//找到第i个结点
p=p->next;
++j;
}
while(!p->next||j>i-1){//未找到的结果
return 0;
}
linklist q;
q=p->next;
p->next=q->next;//指向下下个结点
free(q);//释放这段内存,c语言方法
return 1;
}//删除一个结点。
int getelem(linklist &l,int i,int &e){
//l是带有头结点的单链表的头指针
linklist p;
p=l->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i){
return 0;
}
e=p->data;
return 1;
}//获得第i个位置的值。
void mergelist(linklist &a,linklist &b,linklist &c){
//已知单链表a,b的元素按照递减
//所以c也是递减的。
linklist pa,pb,pc;
pa=a->next;
pb=b->next;
c=pc=a;//用a的头结点作为c的头结点。c一直不变,但是pc接下来要用所以要申请两个那个
while(pa&&pb){
if(pa->data<=pb->data){
pc->next=pa;//将pa插入到pc中
pc=pa;//pc后移,为下一次插入做准备
pa=pa->next;//pa后移
}
else
{
pc->next=pb;//跟上述pa的操作相同。
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(b);
}
void printf_list(linklist &l){
linklist q;
q=l->next;
while(q){
cout<<q->data<<" ";
q=q->next;
}
cout<<endl;
}
int main(int argc, char const *argv[]) {
linklist l1,l2,l3;
int n=10,a=0;
creatlist(l1,n);
creatlist(l2,n);
printf_list(l1);
cout<<"_____________________________"<<endl;
printf_list(l2);
cout<<"_____________________________"<<endl;
listinsert(l1,3,11);
printf_list(l1);
cout<<"_____________________________"<<endl;
listdelete(l1,5);
printf_list(l1);
cout<<"_____________________________"<<endl;
getelem(l1,4,a);
cout<<a<<endl;
cout<<"_____________________________"<<endl;
mergelist(l1,l2,l3);
printf_list(l3);
return 0;
}