一 链表的复制
void fuzhi_linklist(linklist h,int a[])
{linklist p;
linklist q;
int i;
p=h;
for(i = 0;i < 6;i++)
{
q=(linklist)malloc(sizeof(lnode));
q->data=a[i];
q->next=NULL;
p->next=q;
p=q;
}
}
void show_linklist(linklist h)
{
linklist p=h->next;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
二测量链表的长度
int length_linklist(linklist h)
{
linklist p=h;
int count = -1;
while(p)
{
p=p->next;
count++;
}
return count;
}
三 逆置链表
void reverse_linklist(linklist h)
{
linklist p;
linklist q;
p=h->next;
h->next=NULL;
while(p)
{
q=p;
p=p->next;
q->next=h->next;
h->next=q;
}
}
四 定位链表元素
linklist locate_linklist_pos(linklist h, int i)
{
linklist p ;
int j;
p=h;
j = 0;
while(p &&j < 1)
{
p=p->next;
j++;
}
if(j!=i || !p)
{
printf("i error error\n");
return NULL;
}
return p;
}
五 元素插入链表
void insert_linklist(linklist h,int i,datatype x){
linklist p;
linklist q;
p=locate_linklist_pos(h,i-1);
q=(linklist)malloc(sizeof(lnode));
q->data=x;
q->next=p->next;
p->next=q;
}
六 删除链表元素
int delete_linklist(linklist h,int i){
linklist p;
linklist q;
if(h==NULL||h->next==NULL)
{
printf("error");
return 0;
}
p=locate_linklist_pos(h,i-1);
if(p==NULL||p->next==NULL)
{
printf("i error\n");
return 0;
}
q=p->next;
p->next=q->next;
free(q);
return 1;
}