0
Я новичок в C. Я пытаюсь обменять два узла, используя связанные списки. Не уверен, что не так. Это дает мне сообщение об ошибкеУзел Обмен в связанном списке
"temp" не объявлен.
Кроме того, что я могу изменить в этом коде для замены не только char, но и int?
struct lnode {
int some_line;
int count;
char* some_word;
struct lnode* next;
};
void swapNodes(struct lnode** head, struct lnode* n1, struct lnode* n2);
int main()
{
struct lnode* head = NULL;
struct lnode* node0 = newCharNode(&head,"this is");
struct lnode* node1 = newCharNode(&head,"programming");
swapNodes(&head,node0,node1);
getchar();
return 0;
}
void swapNodes(struct lnode** head, struct lnode* n1, struct lnode* n2)
{
struct lnode* current = (*head);
struct lnode* temp;
while((current != NULL) && (current->next != NULL))
{
temp->some_word = n1->some_word;
n1->some_word = n2->some_word;
n2->some_word = temp->some_word;
}
printf("%s %s",n1,n2);
current = (current->next)->next;
}
struct lnode* newCharNode(struct lnode** head, char* myword) {
struct lnode* new_node = (struct lnode*) malloc(sizeof(struct lnode));
new_node ->some_word = myword;
new_node ->next = (*head);
(*head) = new_node;
}
После исправления недостающих включений и отсутствия прототипа для 'newCharNode', я не смог воспроизвести ошибку компиляции, которую вы получаете. – siride
Я включаю файлы, необходимые, я получаю ошибку для temp, которую я понимаю, но как ее исправить, я не знаю этого. Помощь приветствуется. – 2013-02-23 20:51:36
swapNodes, по-видимому, подразумевает просто замену содержимого двух узлов, но функция делает что-то гораздо более сложное. Кроме того, цикл while никогда не войдет в тело цикла или не навешивается навсегда, поскольку указатель «current» никогда не изменяется в цикле. Если вы просто хотите поменять содержимое двух узлов, вам нужно только передать указатели на два узла, обменять все в структурах, кроме указателя на ссылку, и вернуться. – Fred