|
发表于 2004-10-31 23:31:03
|
显示全部楼层
for(p=head->next;p!=NULL;p=p->next)
for(q=p->next;q!=NULL;q=q->next)
if(q->data==p->data){
p->next=q->next;
free(q);
}
当p->data=2 且q->data=2时,
free(q)将删去q指向的内存.这时p=p->next无意义.
#include <stdio.h>
#include <malloc.h>
#define DATATYPE2 int
typedef struct node{
DATATYPE2 data;
struct node* next;
}LINKLIST;
void main(){
int i;
DATATYPE2 buf[]={1,2,2,4,4,6};
LINKLIST *head,*p,*q, *t;
q=head=(LINKLIST*)malloc(sizeof(LINKLIST));
head->next=NULL;
for(i=0;i<6;i++){
p=(LINKLIST*)malloc(sizeof(LINKLIST));
p->data=buf;
q->next=p;
q=p;
}
p->next=NULL;
printf("before is :"); /*输入前的链表*/
p=head->next;
while(p!=NULL){
printf("%d\t ",p->data);
p=p->next;
}
printf("\n");
for(p=head->next;p!=NULL;p=p->next)
for(q=p->next;q!=NULL;q=q->next)
if(q->data==p->data){
t = q;
p->next=q->next;
q=p;
free(t);
}
printf("after is :"); /*输入后的链表*/
p=head->next;
while(p!=NULL)
{
printf("%d\t ",p->data);
p=p->next;
}
printf("\n");
// getch();
} |
|