#include<bits/stdc++.h>
using namespace std;
struct node
{
int data;
node *next;
};
void findth(node *);//查找
void get(node *,int);//取出单链表的第i个结点
void insertt(node *,int ,int );//插入
void print(node *);//输出
void deletee(node *,int );//删除
int len(node *);//求链表实际长度
int main()
{
int x;
cin>>x;
node *head;//申请头结点
head=new node;
node *r;
r=head;//r指向链表的当前最后一个结点,尾结点
while(x!=-1){
node *p=new node;
p->data=x;
p->next=NULL;
r->next=p;//把新结点链接到前面的链表中,实际上r是p的直接前驱
r=p;//尾指针后移一个
cin>>x;
}
node *p;
p=head->next;//头指针没有数据,只要从第一个开头就可以了
while(p->next!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<p->data<<endl;//最后一个数据单独输出
node *pp=head;
findth(pp);//查找
get(pp,2);
insertt(pp,4,100);//插入x在i元素之前,这里在第4个前插入100
print(pp);
deletee(pp,5);//删除第i个元素,这里删除第5个
print(pp);
int a=len(pp);//实际长度
cout<<"len="<<a<<endl;
return 0;
}
void findth(node *p)
{
int x;
cin>>x;
node *pf=p;
while((pf->data!=x)&&(pf->next!=NULL)) pf=pf->next;
if(pf->data==x) cout<<"find "<<pf->data<<endl;
else cout<<"NO find"<<endl;
}
void get(node *p,int i)
{
node *pg=p;
int j=1;
pg=pg->next;//因为第一个是空
while((pg!=NULL)&&(j<i)){
pg=pg->next;
j++;
}
if((p!=NULL)&&j==i){
cout<<"第2个是等于="<<pg->data<<endl;
}
else cout<<"i not exsit"<<endl;
}
void insertt(node *pp,int i,int x)
{
node *p=pp;
node *s;
int j=0;
while((p!=NULL)&&(j<i-1)){
p=p->next;
j++;
}
if(p==NULL) cout<<"no"<<endl;
else{
s=new node;
s->data=x;
s->next=p->next;
p->next=s;
}
}
void print(node *head)
{
node *p;
p=head->next;//头指针没有数据,只要从第一个开头就可以了
while(p->next!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<p->data<<endl;//最后一个数据单独输出
}
void deletee(node *head,int i)
{
node *p=head;
int j=0;
while((p->next!=NULL)&&(j<i-1)){
p=p->next;
j++;
}
if(p==NULL) cout<<"no"<<endl;
else{
node *s;
s=p->next;
p->next=s->next;//或者p->next->next;
free(s);
}
}
int len(node *head)
{
int n=0;
node *p=head;
while(p!=NULL)
{
p=p->next;
n++;
}
return n;
}
这里的长度是7是因为第一个是空结点