2013-02-23 7 views
0

저는 C가 처음입니다. 연결된 목록을 사용하여 두 개의 노드를 바꿔 쓰려고합니다. 무엇이 잘못되었는지 확실하지 않습니다. 그것은 나에게 오류가 있다고 말합니다.연결된 목록의 노드 스와핑

"temp"는 선언되지 않았습니다.

또한이 코드에서 char뿐만 아니라 int도 바꿀 수 있습니까? 무효 swapNodes에서

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에 대한 오류를 얻지 만 그것을 고치는 방법은 모른다. 도움을 주시면 감사하겠습니다. –

+0

swapNodes는 두 노드의 내용을 단순히 바꾸는 것을 의미하지만이 함수는 훨씬 더 복잡한 작업을 수행하고 있습니다. 또한 while 루프는 절대로 루프 본문에 들어 가지 않거나 "현재"포인터가 절대로 루프에서 수정되지 않으므로 영원히 반복합니다. 두 노드의 내용을 바꾸려면 두 노드에 포인터를 전달하고 링크 포인터를 제외한 구조체의 모든 내용을 바꿔서 반환해야합니다. – Fred

답변

1

()

temp->some_word 

여기에 온도 만 초기화되지 않은 포인터이고 당신은 그 지정을 할 수 없습니다.