#include <stdio.h> #define len sizeof(struct a) #define NULL 0
struct a {char lk; struct a *next ; };
main() {struct a *head,*p,*q,*r; int i; char ch;
head=p=(struct a *) malloc(len);
for(i=1;i<=26;i++) {(p->lk)=('a'+i-1); p->next=(struct a *)malloc(len); p=p->next;
} p->next=NULL; p=head;
while (p->next != NULL)
{ printf("%c ",p->lk); p=p->next; } printf("\n");
printf("input deleted zimu:");
scanf("%c",&ch); p=head; while(ch != '0') { if(head->lk==ch) {head=head->next; free(p); } else
while((p->lk != ch) && (p->next != NULL)) { q=p; p=p->next; }
if(p->lk==ch) {q->next=p->next; free(p);}
printf("\n"); p=head; while(p->next != NULL) {printf("%c ",p->lk); p=p->next; } printf("\n"); printf("input deleted zimu:"); scanf("%c",&ch);
} }
----------------解决方案--------------------------------------------------------
等等,请说清楚点,我根本就不明白你想实现什么而不能实现什么呀!
----------------解决方案--------------------------------------------------------
printf("input deleted zimu:");
scanf("%c",&ch); p=head; while(ch != '0') { if(head->lk==ch) {head=head->next; free(p); } else
while((p->lk != ch) && (p->next != NULL)) { q=p; p=p->next; }
if(p->lk==ch) {q->next=p->next; free(p);} 你这样当然只能删除一个了。因为他你输入一个他就删除一个。如果想全删除也行 ---------------------------------------- p=head; while(p){ q=p; p=p->next; free(q); } p=NULL; //这个可以不要。但是为了养成编程的良好习惯最好是加上。因为这样就不会造成空悬指针。 q=NULL; free(head);
----------------解决方案--------------------------------------------------------
而且你的删除好象很有问题。你的括号让人看了就头晕。。。。。
如果想删除一个就这样写吧
p=head;
while(p->next!=NULL&&p->next->data!=key) //key为你要删除的字符
p=p->next;
if(p->next==NULL) printf("没有找到你要删除的字符\n!"); //如果找到链表末尾都没找到你要删除的字符。那就输出提示语句
else {
q=p->next; //然后使q指向要删除的节点
p->next=q->next; //改变p指向的位置
free(q); //删除节点
q=NULL; //不要造成空悬指针 。这个是我个人风格。。。。这样没那么容易出错
}
坚强依然!永不言苦!永不言败!睇透数据结构!编程编程再编程!------激情依旧
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
好好理解3-4楼的回复,
还有,你是在刚刚学习裢表吧,加油喔~
----------------解决方案--------------------------------------------------------
是的``
刚学链表,老师就让做 ,26个字母的插入和删除````
----------------解决方案--------------------------------------------------------
老是让我们做的26个字母的操作我先给大家说一下把`````````````````````````````````````````
首先 在 tc 的输出界面 先打印一行 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
input deleted letter:j
用户输入个 j 后 a,b,c,d,e,f,g,h,i,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
input deleted letter:a
b,c,d,e,f,g,h,i,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
input deleted letter: 输入0后退出界面,回到编程窗口
----------------解决方案--------------------------------------------------------
恩,很遗憾,我下午还要去上课,只能很不负责任的和你说看3-4楼的贴子,其实我自己都没看.不过既然别人写了你就必需看看,1是尊重别人的劳动成果2也可以从中吸取经验.
等下午回来如果你还希望我能解答的话我一定会尽自己的一份薄力的.
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------