using namespace std;
struct Linklist
{
int data;
Linklist *next;
};
Linklist *L,*rear;
void create()//尾插法建立链表
{
Linklist *p;
int x;
cout<<"输入链表元素(按升序顺序输入):"
while(cin>>x&&x!=0)
{
if(L==NULL)
{
L=new Linklist;
L->data=x;
rear=L;
L->next=NULL;
}
else
{
p=new Linklist;
p->data=x;
rear->next=p;
p->next=NULL;
rear=p;
}
}
rear->next=NULL;
}
void del(int x)//删除data域值为x的结点
{
Linklist *p,*k,*t;
k=p=L;
while(p!=NULL)
{
if(p->data==x)
break;
k=p;
p=p->next;
}
if(p==L)
{
p=L;
L=L->next;
delete p;
}
else if(p==rear)
{
k->next=NULL;
delete p;
}
else if(p==NULL)
{
cout<<"没有值为"<
else
{
k->next=p->next;
delete p;
}
}
void insert(int x)//插入data域值为x的结点(默认原链表为升序排列)
{
Linklist *s,*p,*k;
s=new Linklist;
s->data=x;
s->next=NULL;
k=p=L;
while(p!=NULL)
{
if(p->data>=x)
break;
k=p;
p=p->next;
}
if(p==L)
{
L=s;
s->next=p;
}
else if(p==NULL)
{
k->next=s;
}
else
{
k->next=s;
s->next=p;
}
}
void output()//将链表输出
{
Linklist *p;
p=L;
cout<<"链表中的元素为:";
while(p!=NULL)
{
cout<
p=p->next;
}
cout<
void LinkListDemo()
{ // L是无头结点的单链表
Linklist *q, *p,*t;//p指针用于指示原链表最后的结点(即an),q指针用于指示原来的头结点(即a1)
q=L;
if ( q && q->next )
{
t=q;//将q指针指向a1
L=L->next;//将L指针指向新链表的头结点(即a2)
rear->next=q;
q->next=NULL;
t=NULL;
}
}
void main()
{
create();
output();
int x;
cout<<"输入需要插入的元素:";
cin>>x;
insert(x);
output();
cout<<"输入需要删除的元素:";
cin>>x;
del(x);
output();
LinkListDemo();
output();
}