#include<bits/stdc++.h>
using namespace std;
typedef struct Lnode
{
int data;//结点数据域
struct Lnode *next;//结点指针域
}Lnode,*Linlist;//*LinkLisu为指向结构体Lnode的指针类型
int InitList_L(Linlist &L)//初始化链表
{
L=new Lnode; //new 即动态分配内存后返回头首地址
L->next=NULL;
return 0;
}
int ListEMpty(Linlist L)//判空
{
if(L->next)
return 0;
else return 1;
}
int Destroylist(Linlist &L)//删除链表
{
Lnode *p;
while(L)
{
p=L;
L=L->next;
delete p;
}
}
//将L重置为空表依次释放所有结点,并将头结点指针域设置为空
int ClearList(Linlist &L)
{
Lnode *p,*q;
p=L->next;
while(p)
{
q=p->next;
delete p;
p=q;
}
L->next=NULL;
return 1;
}
//求链表表长
int Listlength(Linlist L)
{
int num=0;
Linlist p;
p=L->next;
while(p)
{
num++;
p=p->next;
}
return num;
}
//取值
int getelem(Linlist L,int i,int &e)
{
Linlist 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;
}
//按值查找
Lnode *Locateelem(Linlist L,int e)
{
Lnode *p= L->next;
while(p&&p->data!=e)
{
p=p->next;
}
return p;
}
//按值查找返回位置
int locateelem(Linlist L,int e)
{
Linlist p=L->next; int j=1;
while(p&&p->data!=e)
{
p=p->next; j++;
}
if(p)return j;
return 0;
}
//插入
void insertelem(Linlist &L,int i,int e)
{
Lnode *tmp=new Lnode;
tmp->data=e; int j=0;
Linlist p=L;
while(p&&j<i-1)
{
p=p->next;++j;
}
tmp->next=p->next;
p->next=tmp;
return ;
}
//删除
void deleteelem(Linlist &L,int i)
{
Linlist p=L; int j=0;
while(p->next&&j<i-1){p=p->next;++j;}
Linlist q=p->next;
p->next=p->next->next;
delete q;
}
//头插法 新元素插入链表头部
void CreateList(Linlist &L,int n)
{
L=new Lnode; L->next=NULL;
cout<<"输入链表数值"<<endl;
for(int i=n;i>0;i--)
{
Lnode *p=new Lnode;
cin>>p->data;
p->next=L->next;//插入表头
L->next=p;
}
}
void print(Linlist L)
{
Linlist p=L->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
return ;
}
int main()
{
Linlist L;
InitList_L(L);
CreateList(L,5);
print(L);
return 0;
}