链表结构:
typedef struct node
{
int data;//data数据域
struct node *next;//指针域
}Lnode,*Linklist;
//创建链表 长度为n,返回头结点,
Linklist Creatlink(int n)
{
int e;
Linklist first=NULL,last,p;
for(int i=0;i<n;i++)
{
cin>>e;
p=(Linklist)malloc(sizeof(Lnode));
p->data=e;
p->next=NULL;
if(first==NULL)
first=last=p;//first node.
else
last->next=p;
last=p;
}
return first;
}
//插入 节点 q为插入的节点,first为该list的头。
void insertlist(Linklist first,Linklist q,int e)
{
Linklist p;
p=(Linklist)malloc(sizeof(Lnode));
p->data=e;
if(!first)//链表为空
{
first=p;
p->next=NULL;
}
else
{
p->next=q->next;//两步:1.p和下个节点连起来
q->next=p;//2.q和p连起来。
}
}
//删除节点
Linklist delnodelist(Linklist first,Linklist q)
{
Linklist r;//q的前驱节点指针
if(q==first)//头结点
{
first=q->next;
free(q);
return first;
}
else
{
for(r=first;r->next!=q;r=r->next);//寻找q的前驱节点指针,赋给r
if(r->next!=NULL)
{
r->next=q->next;
free(q);
}
else if(q->next==NULL)//链表尾
{
r->next=NULL;
free(q);
}
return first;
}
}
//销毁链表
void destroylist(Linklist first)
{
Linklist p,q;
p=first;
while(p)
{
q=p->next;
free(p);
p=q;
}
first=NULL;
}
程序在VC6.0演示过,没问题,可以任意插入n个节点和删除n个节点。有问题欢迎指正!!!