链表的各种操作

来源:互联网 发布:知天下吧 ztx8.net 编辑:程序博客网 时间:2024/05/01 07:38

链表结构:

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个节点。有问题欢迎指正!!!

原创粉丝点击