не удается удалить узел в одиночном списке
У меня возникла проблема с удалением узла с указанным символом в связанном списке. Программа принимает аргументы командной строки, объединяет их в одну строку и добавляет каждый символ в связанный список как узел.
Когда я пытаюсь удалить символ «a» с аргументом командной строки «mango», он отлично работает, т. Е. Успешно удаляет второй узел. когда я пытаюсь сделать то же самое с «оранжевым», программа не удаляет его ... означает, что программа не может работать с третьими и более удаленными узлами.
Программа не должна использовать глобальные переменные, поэтому я использовал двойной указатель. Все функции работают исправно, эта проблема может возникнуть из-за некоторых ошибок в функции locate() и deleteChar(), но я не могу понять, что это за ошибка.Можно ли решить эту проблему, используя двойной указатель ?? я не могу понять, что это неправильно в этой программе .. Я новичок в программирования C, пожалуйста, помогите мне с этим .. Пожалуйста, исправить меня .. Заранее спасибо ..
код приведен ниже:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct linkedList {
char ch;
struct linkedList *node;
};
char* combineWithNoSpaces(int, char *[]);
void addTolinkedList(char *, struct linkedList **, int *);
void displayWithNoSpaces(struct linkedList **);
struct linkedList *locate(struct linkedList**);
void deleteChar(struct linkedList**);
int main(int argc, char *argv[]) {
/*some variables*/
char *str;
struct linkedList *s;
int indexer = 0;
/*add data from arguments to linked list combine arguments with no spaces
* as a single string
*/
s = (struct linkedList *) malloc(sizeof(struct linkedList));
str = combineWithNoSpaces(argc, argv);
addTolinkedList(str, &s, &indexer);
/*diaplay the added data to linked list with no spaces */
printf("your combined argument is \n");
displayWithNoSpaces(&s);
printf("\n");
/* Delete specified character */
printf("Now Deleting the node with specified character : \n");
deleteChar(&s);
/* Display the data after deleting */
printf("Displaying after deleting..\n");
displayWithNoSpaces(&s);
printf("\n");
return 0;
}
int i = 0;
struct linkedList *locate(struct linkedList **s){
if((*s)->node->ch == 'a'){
return *s;
}
else if((*s)->node!=NULL){
locate(&((*s)->node));
}
return NULL;
}
void deleteChar(struct linkedList **s){
struct linkedList *temp, *tag;
tag = locate(s);
if(tag!= NULL){
temp = tag->node->node;
free(tag->node);
tag->node = temp;
}
}
void displayWithNoSpaces(struct linkedList **s) {
if ((*s) != NULL) {
printf("%c", (*s)->ch);
displayWithNoSpaces(&(*s)->node);
}
return;
}
void addTolinkedList(char *str, struct linkedList **s, int *indexer) {
if (*indexer == strlen(str)) {
*s = NULL;
return;
} else {
(*s)->ch = *(str + *indexer);
(*s)->node = (struct linkedList *) malloc(sizeof(struct linkedList));
++*indexer;
addTolinkedList(str, &(*s)->node, indexer);
}
}
char * combineWithNoSpaces(int argc, char *argv[]) {
int i, j;
int count = 0;
int memory = 0;
char *str;
for (i = 1; i < argc; i++) {
for (j = 0; j < strlen(argv[i]); j++) {
++memory;
}
}
str = (char *) malloc(memory * sizeof(char));
for (i = 1; i < argc; i++) {
for (j = 0; j < strlen(argv[i]); j++) {
*(str + count) = argv[i][j];
++count;
}
}
return str;
}
Возможная Дубликат [C программирования Linked Lists удалить узел в положении N] (http://stackoverflow.com/questions/5011990/c-programming-linked-lists-delete-node-at-position-n) – progyammer
Поверьте мне, что это не дубликат progy_rock, функция locate() не возвращает указатель структуры правильно или я не могу правильно принять возвращаемый указатель структуры .. кроме того, он имеет дело с двойным указателем .. Я не получаю никакой помощи от каких-либо источник .. – user3213732
Почему вы рекурсивно размещаете? –