链表由一个个结点组成,与顺序表直接申请一大块空间不同,链表的创建需先由结点的创建开始,像内存空间申请一块小的空间就是创建一个结点,通过指针域将这些元素联系在一起便成为了一个链表
#include<iostream>
using namespace std;
//自定义变量名称
typedef int ElemType;
//创建结构体类型
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode;
//创建链表 (头插法)
void list_creat(LNode *L,int length){
LNode *p=new LNode;
for(int i=1;i<=length;i++){
LNode *p=new LNode;
cout<<"请您输入第"<<i<<"个值:"<<endl;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
//打印链表元素
void list_print(LNode *L){
LNode *p;
p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
}
//插入
void list_insert(LNode *L,int i,int e){
LNode *p,*q;
int k=1;
q=L;
p=L->next;
while(k<i){
q=p;
p=p->next;
k++;
}
p=new LNode;
p->data=e;
p->next=q->next;
q->next=p;
}
//删除
void list_delete(LNode *L,int i){
LNode *p,*q;
int k=1;
p=L->next;
while(k<i){
p=p->next;
k++;
}
q=p->next;
p->next=q->next;
delete q;
}
int main(){
//创建链表节点
LNode *la;
//分配链表长度变量
int n;
//分配增加位置及数值变量
int loc,value;
//分配删除位置变量
int del;
//分配空间
la = new LNode;
la->next=NULL;
cout<<"请输入单链表的长度:"<<endl;
cin>>n;
list_creat(la,n);
list_print(la);
//逻辑判断输入位置是否合法
do{
cout<<"输入插入表的位置:"<<endl;
cin>>loc;
}while(loc<1 || loc>n+1);
cout<<"输入插入表的值:"<<endl;
cin>>value;
//执行插入函数
list_insert(la,loc,value);
list_print(la);
cout<<"请输入要删除的位置变量:"<<endl;
cin>>del;
list_delete(la,del);
list_print(la);
return 0;
}
小结一下,链表的创建就是申请空间以此创建结点,为数据与赋值,使用指针域将其联系在一起