冲锋衣学生平时能穿吗:有错误的c程序链表问题

来源:百度文库 编辑:神马品牌网 时间:2024/05/09 10:07:08
一个接受链表然后把0值的链表删去的函数。

为什么最后总是出问题,windows要强行关闭?

#include <stdio.h>
#include <malloc.h>
#define NULL 0

struct node{
int data;
node *next;
};

struct node *dellist(node *head)
{
node *r,*p;
if (head != NULL)
{
r=head;
while(r->data!=0 && r->next!=NULL)
{ p=r;r=r->next;}
if(r->data==NULL)
{
if(r==head)head=r->next;
else p->next=r->next;
}
return (head);
}
}

void main()
{
struct node old[3];
struct node *dp,*nhead;
old[0].data=10;old[0].next=&old[1];
old[1].data=0;old[1].next=&old[2];
old[2].data=30;old[2].next=&old[3];
old[3].data=40;old[3].next=NULL;
nhead=dellist(old);
dp=nhead;
do
{printf("%d\n",dp->data);
dp=dp->next;
}while(dp!=NULL);

}

我想,这个函数应该更适合你:
void dellist(node *head)
{
node *p = head,*pp = p;
while(p)
{
if(p->data)
{
pp->next=p->next;
free(p);
}
p=p->next;
pp=p;
}
}

只要运行dellist(old) 然后nhead=old就可以了