-1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <ctype.h>
struct Stud
{
char name[20];
struct Stud *next;
};
struct Stud *hptr=NULL,*tptr;
//char data[20];
void deleteKey(struct Stud *hptr,char data[20])
{
struct Stud * temp = hptr, *prev;
while (temp != NULL && temp->name == data)
{
hptr = temp->next;
free(temp);
temp = hptr;
}
while (temp != NULL)
{
while (temp != NULL && temp->name != data)
{
prev = temp;
temp = temp->next;
}
if (temp == NULL) return;
prev->next = temp->next;
free(temp);
temp = prev->next;
}
}
void createList(char *s)
{
struct Stud *nptr;
nptr=(struct Stud *)malloc(sizeof(struct Stud));
strcpy(nptr->name,s);
if(hptr==NULL)
hptr=tptr=nptr;
else
tptr->next=nptr;
tptr=nptr;
nptr->next=NULL;
}
void display(){
while(hptr!=NULL) {
printf("%s ",hptr->name);
hptr=hptr->next;
}
}
void main(){
int i,n;
char str1[20];
char s[20];
scanf("%d",&n);
for(i = 0; i < n; i++) {
scanf("%s",str1);
createList(str1);
}
scanf("%s",s);
display();
deleteKey(hptr, s);
display();
}
deleteKeyに引数を渡す際に希望のoutput.pleaseが正しく表示されません。 。 例えば: 入力: kmit jntu snist CBIT ngit CBIT 出力:それので、参照により関数にヘッドノードを通過する必要が kmit jntu snist ngitc指定されたリンクリストから要素を削除して、リスト全体を印刷します。
のですか?また、指定された入力に対して、実際の出力と期待される出力も含めます。 –
開始: '... && temp-> name == data'の場合、文字配列とこのような文字列を比較することはできません。 – wildplasser
'strcmp'を使用して文字配列を比較します。 [strcmp](http://www.cplusplus.com/reference/cstring/strcmp/) – woz