#include<iostream>
using namespace std;
typedef struct node{
int data;
struct node *next;
}Lnode;
//头插法
Lnode*creat1()
{
Lnode*h,*p;
h=(Lnode*)malloc(sizeof(Lnode));
h->next=NULL;
int n;
while(cin>>n&&n)
{
p=(Lnode*)malloc(sizeof(Lnode));
p->data=n;
p->next=h->next;
h->next=p;
}
return h;
}
//尾插法
Lnode*creat2()
{
Lnode*h,*p,*t;
h=(Lnode*)malloc(sizeof(Lnode));
h->next=NULL;
int n;
t=h;
while(cin>>n&&n)
{
p=(Lnode*)malloc(sizeof(Lnode));
p->data=n;
p->next=NULL;
t->next=p;
t=p;
}
return h;
}
int insert(Lnode*h,int i,int elem)
{
Lnode*p,*s;
p=h;
int j=0;
while(p&&j<i-1)
{
j++;
p=p->next;//得到指向i-1号节点的指针
}
if(p)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=elem;
s->next=p->next;
p->next=s;
return 1;
}
else return 0;
}
int length(Lnode*h)
{
Lnode*p;
int sum=0;
p=h->next;
while(p)
{
p=p->next;
sum++;
}
return sum;
}
int dele(Lnode*h,int i)
{
Lnode*p,*q;
int j=0;
p=h;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(p)
{
q=p->next;
p->next=q->next;
free(q);
return 1;
}
else return 0;
}
Lnode*get(Lnode*h,int i)
{
Lnode*p;
int j=1;
p=h->next;
while(p&&j<i)
{
p=p->next;
j++;
}
if(i==j)
return p;
else return NULL;
}
void putlist(Lnode*h)
{
Lnode*p;
p=h->next;
while(p)
{
cout<<p->data<<' ';
p=p->next;
}
}
int main()
{
Lnode*h;
h=creat2();
int b=insert(h,4,18);
int a=dele(h,3);
cout<<length(h)<<endl;
cout<<get(h,2)->data<<endl;
putlist(h);
return 0;
}
链表的基本操作
最新推荐文章于 2024-01-20 17:34:59 发布