typedef struct node
{ int data;
struct node *next;
}NODE;
int x,i;
NODE *creat()
{ NODE *head,*p,*s;
head=(NODE*)malloc(sizeof(NODE));
p=head;
printf("输入整数,以0标志结束\n");
scanf("%d",&x);
while(x!=0)
{ s=(NODE*)malloc(sizeof(NODE));
s->data=x;
p->next=s;
s->next=NULL;
p=s;
scanf("%d",&x);
}
p->next=NULL;
p=head;
head=head->next;
free(p);
return head;
}
void delete(head,x)
{ NODE *head,*p,*q;
if(head==NULL) printf("链表下益\n");
if(head->data==x)
{ p=head;
head=head->next;
free(p);
}
else
{ q=head; p=head->next;
while(p!=NULL&&p->data!=x)
if(p->data!=x)
{ q=p;p=p->next;
}
if(p!=NULL)
{ q->next=p->next;
free(p);
}
else printf("没找到\n");
}
}
main()
{ NODE *head,*p;
head=creat();
p=head;
while(p!=NULL)
{ printf("%d",p->data);
p=p->next;
}
printf("输入要删除的节点:");
scanf("%d",&x);
delete(head,x);
p=head;
while(p!=NULL)
{ printf("%d",p->data);
p=p->next;
}
} //谁能调通就把200块拿去吧
[此贴子已经被作者于2005-3-28 14:18:27编辑过]
----------------解决方案--------------------------------------------------------
你这个程序写得太乱了!给你点建议:
(1)没有必要把X和I定义为全局变量;
(2)在删除函数中,两个形参的类型应该定义;
如果你想要链表运算的程序,可以发个贴!但是,这个程序,修改量比较大,会改得面目全非的!
----------------解决方案--------------------------------------------------------
我真想扣你200的积分, 我只改了一点就行了。 我的跟书上差不多, 你说书烂啊?
----------------解决方案--------------------------------------------------------
看在只有你回帖子的份上,送你200积分~ 反正我也拿不回了
----------------解决方案--------------------------------------------------------
不好意思!无功受禄。
有问题多交流!
----------------解决方案--------------------------------------------------------
好啊, 你QQ是多少?(注意: 不轮男女)
----------------解决方案--------------------------------------------------------
//改的程序如下: #include"stdio.h" #include"stdlib.h" //------这是你用分配函数时所用的库,必要
struct node { int data; struct node *next; }NODE; //现在你的NODE是全局变量.其实也没用上. struct node * cc() //--------前面的指针是struct node类型的 { int x; struct node *head=NULL,*p,*s; //---要写成这样才对,NODE是变量,不能定义别人了. printf("输入整数,以0标志结束:"); scanf("%d",&x); while(x!=0) { s=(struct node*)malloc(sizeof(struct node)); //开辟空间把首地址给s s->data=x; //新的空间的值域部分赋键盘输入值 s->next=NULL; if(head==NULL) head=s; else p->next=s; p=s; printf("输入整数,以0标志结束:"); scanf("%d",&x); //输入下面一系列的数 } //p->next=NULL; //---我不明白你下面的话什么意思.我注视掉了 //p=head; //head=head->next; //free(p); //---这里怎么还要释放? return head; }
struct node * dd(struct node *head,int x) //这是的delete好像不能用,还是换成dd能使,delete是电脑的保留字 { struct node *p,*q; //---同上 if(head==NULL) {printf("链表下益\n"); return head;} //--返回吧!! if(head->data==x) { //--对 p=head; head=head->next; free(p); return head; } //--对 else { q=head; p=head->next; while((p!=NULL)&&(p->data!=x)) //--这样写,我觉得好些,自己也看的清. if(p->data!=x) { q=p; p=p->next;} if(p!=NULL) { q->next=p->next; free(p); } else printf("没找到\n"); } return head; }
void main() //----这样写好一点 { int x; struct node *head,*p; //---同上 head=cc(); p=head; while(p!=NULL) { printf("%5d",p->data); //----这里是%5d看的清楚点. p=p->next; } printf("\n输入要删除的节点:"); scanf("%d",&x); head=dd(head,x); //这里还是要返回的,因为当你删除的是第一个元素时,就会找不到指针了. p=head; while(p!=NULL) { printf("%5d",p->data); //----这里是%5d看的清楚点. p=p->next; } printf("\n"); //---这里也看的清楚点 } //你看看吧.我试了,可以了.
----------------解决方案--------------------------------------------------------
104873567
----------------解决方案--------------------------------------------------------
请问这位同志笑什么呢?我也笑
----------------解决方案--------------------------------------------------------