最近我开始在c中开始这个程序,并提出了一个问题。我找不到为什么列表只有1个元素。
我正在创建一个列表,以便链表的所有部分都是“问题”数组的字母,并且不会有任何重复。
任何帮助都将不胜感激。
这是我创建列表的函数:
void createAlphabet(ALPHABET **head, char *problem, int *error){
ALPHABET *current=NULL;
int length = strlen(problem);
int i;
for (i=0;i<length;i++){
if(isalpha(problem[i])){
if(current==NULL){
current=(ALPHABET*)malloc(sizeof(ALPHABET));
current->next=NULL;
current->letter=problem[i];
(*head)=current;
}
else{
current=(*head);
while(problem[i]!=current->letter && current->next!=NULL){
current=current->next;
}
if(problem[i]!=current->letter){
current=current->next;
current=(ALPHABET*)malloc(sizeof(ALPHABET));
current->next=NULL;
current->letter=problem[i];
}
}
}
}
答案 0 :(得分:1)
问题在于:
if(problem[i]!=current->letter){
current=current->next;
current=(ALPHABET*)malloc(sizeof(ALPHABET));
current->next=NULL;
current->letter=problem[i];
}
在current=whatever;current=(ALPHABET*)malloc(sizeof(ALPHABET));
中,malloc()
修改current
,但不会更改whatever
。
尝试:
if(problem[i]!=current->letter){
current->next=malloc(sizeof(ALPHABET));
if(current->next==NULL){printf("malloc failed\n");exit(1);}
current=current->next;
current->next=NULL;
current->letter=problem[i];
}