#include <iostream>
using namespace std;
typedef struct LNode
{
char data;
struct LNode *next;
} LNode,*LinkList;
//初始化带头节点的单链表
void InitList(LinkList &L)
{
L=new LNode;
L->next=NULL;
}
//前插法创建单链表
void CreatList(LinkList &L,int n)
{
int i;
LinkList p;
L=new LNode;
L->next=NULL;
for(i=0; i<n; i++)
{
p=new LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
//尾插法创建单链表
void CreatList1(LinkList &L,int n)
{
int i;
LinkList p,q;
L=new LNode;
L->next=NULL;
q=L;
for(i=0; i<n; i++)
{
p=new LNode;
cin>>p->data;
p->next=q->next;
q->next=p;
q=p;
}
}
//输出单链表
void print(LinkList L)
{
LinkList p=L->next;
while(p)
{
cout<<p->data;
p=p->next;
}
cout<<"\n";
}
//单链表的插入
void ListInsert(LinkList &L,int i,char e)
{
LinkList p=L,s;
int j=0;
while(p&&(j<i-1))
{
p=p->next;
++j;
}
if(!p||j<i-1)
{
cout<<"error";
cout<<"\n";
}
else
{
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
cout<<"succ";
cout<<"\n";
}
}
//单链表倒置
void Inversion(LinkList &L)
{
LinkList p=L->next;
LinkList q;
L->next=NULL;
while(p)
{
q=new LNode;
q->data=p->data;
q->next=L->next;
L->next=q;
p=p->next;
}
}
//单链表的删除
void ListDelete(LinkList &L,int i)
{
LinkList p,q;
int j=0;
p=L;
//找到要删除结点的前一结点
while(p->next&&(j<i-1))
{
p=p->next;
j++;
}
if((!p->next)||(j>i-1))
{
cout<<"error";
cout<<"\n";
}
else
{
q=p->next;
p->next=q->next;
delete q;
cout<<"succ";
cout<<"\n";
}
}
int main()
{
LinkList L;
int n;
cin>>n;
CreatList1(L,n);
print(L);
ListDelete(L,5);
print(L);
return 0;
}
运行结果