链表三(读入,输出,查找,插入,删除,求实际长度)

#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是因为第一个是空结点

猜你喜欢

转载自blog.csdn.net/wchenchen0/article/details/81225999