求大神啊!!!为什么内存不能为read,初步判断为deletesl()函数错误,但为什么错?
有序的一组整数,1-2-2-3-4-6-6设计单链表,分别编写函数实现以下操作:
初始化链表。
添加上述一组数(结点),生成该链表。
统计该链表的长度。
在表中查找数据为3和7的结点,并返回其位置(若找不到返回 -1)。
删除中间重复结点,使链表变为 1-2-3-4-6。
显示经B,E操作后,链表的状况。
#define MAXNUM 100
#include "stdlib.h"
#include "stdio.h"
typedef struct node
{
int data;
struct node *next;
}node;
node *initiatesl(node *h)
{
h->next=NULL;
return (h);
}
node* creatlist(node *h)
{
node *p,*s;
int j=0;
int x[MAXNUM]={1,2,2,3,4,6,6,-1};
int *p_x=x;
h=(node*)malloc(sizeof(node));
h->next=NULL;
while(*p_x!=-1)
{
s=(node*)malloc(sizeof(node));
s->data=*p_x;
if(h->next==NULL)
{
h->next=s;
}
else
{
p->next=s;
}
p=s;
p_x++;
}
p->next=NULL;
return (h);
}
int length(node *h)
{
node *p=h;
int listlength=0;
while(p->next!=NULL)
{
listlength++;
p=p->next;
}
return (listlength);
}
int search(node *h,int i)
{
node *p=h;
int k=0,j=1;
while(p->next!=NULL)
{
if(p->data==i)
{
k=j;
return (k);
}
else
{
j++;
p=p->next;
}
}
if(p->next==NULL)
{
return (-1);
}
return (k);
}
void deletesl(node *h)
{
node *p=h,*q,*s;
while(p->next!=NULL)
{
if(p->data==p->next->data)
{
q=p->next;
s=p->next->next;
p->next=s;
free(q);
}
p=p->next;
}
}
void print(node *h)
{
node *q;
q=h->next;
if(h!=NULL)
{
printf("h->");
while(q!=NULL)
{
printf("%d->",q->data);
q=q->next;
}
printf("NULL\n");
}
}
int main()
{
node *h;
int listlength=0;
int i=0;
h=(node*)malloc(sizeof(node));
if(!h)
{
printf("Memory out !\n");
exit (0);
}
h=initiatesl(h);
h=creatlist(h);
listlength=length(h);
print(h);
printf("The list's length is %d\n",listlength);
i=3;
printf("search %d: %d\n",i,search(h,i));
i=7;
printf("search %d: %d\n",i,search(h,i));
deletesl(h);
print(h);
return 0;
}
[ 本帖最后由 koko_2012 于 2012-3-27 23:00 编辑 ]