2013-02-23 4 views
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; 
    } 
+0

После исправления недостающих включений и отсутствия прототипа для 'newCharNode', я не смог воспроизвести ошибку компиляции, которую вы получаете. – siride

+0

Я включаю файлы, необходимые, я получаю ошибку для temp, которую я понимаю, но как ее исправить, я не знаю этого. Помощь приветствуется. – 2013-02-23 20:51:36

+0

swapNodes, по-видимому, подразумевает просто замену содержимого двух узлов, но функция делает что-то гораздо более сложное. Кроме того, цикл while никогда не войдет в тело цикла или не навешивается навсегда, поскольку указатель «current» никогда не изменяется в цикле. Если вы просто хотите поменять содержимое двух узлов, вам нужно только передать указатели на два узла, обменять все в структурах, кроме указателя на ссылку, и вернуться. – Fred

ответ

1

В недействительных swapNodes()

temp->some_word 

здесь температура лишь неинициализированным указатель, и вы не можете сделать это назначение.

Смежные вопросы