#include<iostream>
using namespace std;
typedef struct node
{
int date;
struct node *next;
}lnode;
void foundlnode(lnode *l)//创建链表
{
int n,i=0;
lnode *p1=l,*p2;
cout<<"输入链表长度:\n";
cin>>n;
cout<<"输入数据:\n";
while(p1)
{
if(i==n)
break;
p2=(lnode *)new lnode;//开辟节点
while(!p2)
{
p2=(lnode *)new lnode; //开辟失败,直到开辟成功为止
}
cin>>p2->date;//输入元素数据
p1->next=p2;
p1=p1->next;
i+=1;
}
p2->next=NULL;//最后一个节点指针域为空
}
void releaselnode(lnode *l)// 释放链表
{
lnode *p1=l->next,*p2;
while(p1)
{
p2=p1->next;
delete p1;
p1=p2;
}
}
void strlenlnode(lnode* l,int *n)//查询链表长度
{
int i=0;
lnode *p1=l->next;
while(p1)
{
i+=1;
p1=p1->next;
}
*n=i;
}
void seeklnode(lnode *l,int n)//查找元素
{
lnode *p1=l->next;
while(p1)
{
if(p1->date==n)
{
cout<<"元素"<<n<<"存在!\n";
return ;
}
p1=p1->next;//指向下一个节点
}
cout<<"你查找的元素不存在!\n";
}
void insertlnode(lnode *l,int bit,int num)//元素插入
{
int i=0;
lnode *p1=l->next,*p2;
while(p1)
{
i+=1;
if(i==bit)//找到要插入的位置
{
p2=(lnode *) new lnode; //开辟一个新节点
while(!p2)
{
p2=(lnode *) new lnode;//若开辟失败,重新开辟
}
p2->date=num;
p2->next=p1->next;
p1->next=p2;
return ;
}
p1=p1->next;
}
cout<<"要插入的位置错位!\n";
}
void deletelnode(lnode *l,int num)//元素删除
{
lnode *p1=l->next,*p2=l; //p2位p1的后继节点指针
while(p1)
{
if(p1->date==num)
{
p2->next=p1->next;//p2指向被删除节点的下一个节点
delete p1;//释放该节点
return ;
}
p1=p1->next;
p2=p2->next;
}
}
void printflnode(lnode *l)//输出元素
{
lnode *p1=l->next;
while(p1)
{
cout<<p1->date<<" ";
p1=p1->next;
}
cout<<endl;
}
int main()
{
int bit,nub,len;
lnode *head;
head=(lnode*)new lnode;//创建头节点
while(!head)
{
head=(lnode*)new lnode; //开辟失败重新失败
}
/*创建链表*/
foundlnode(head);
/*插入元素*/
cout<<"输入插入元素的位置和元素:\n";
cin>>bit>>nub;
insertlnode(head,bit,nub);
/*输出链表元素*/
printflnode(head);
/*求链表长度*/
cout<<"当前链表长度为:";
strlenlnode(head,&len);
cout<<len<<endl;
/*元素删除*/
cout<<"输入要删除的元素:\n";
cin>>nub;
deletelnode(head,nub);
/*输出链表元素*/
printflnode(head);
/*求链表长度*/
cout<<"当前链表长度为:";
strlenlnode(head,&len);
cout<<len<<endl;
/*元素查找*/
cout<<"输入要查找的元素:\n";
cin>>nub;
seeklnode(head,nub);
/*释放链表*/
releaselnode(head);
delete head;//释放头节点
return 0;
}