2013-07-08 3 views
-1

이것은 연결 목록 용으로 작성한 코드입니다. 기본적으로 입력을 받아 인쇄합니다. 컴파일시 오류가 발생하지 않으며 출력도 없습니다. 이 코드가 잘못된 것은 아닙니다. 도와주세요. 당신은 당신이 할 때 노드의 포인터를 유지하고 또한 같은 시도 *인쇄 연결된 목록에서 출력 없음

node=malloc(sizeof(struct list*)); 

를 제거하지 않기 때문에

#include<stdio.h> 

struct list { 
    int data; 
    struct list* next; 
}; 

insert(struct list* node, int data) 
{ 
    node = malloc(sizeof(struct list*)); 
    if (node == NULL) 
    node = data; 
    else 
    node->data = data; 
    node->next = NULL; 
return node; 
} 

printlist(struct list* node) 
{ 
if (node == NULL) 
    printf("Empty list\n"); 
while(node->next != NULL) 
    printf("the list contains %d", node->data); 
    node = node->next; 
} 

main() 
{ 
    struct list* NODE; 
    NODE = malloc(sizeof(struct list*)); 
    insert(NODE, 3); 
    insert(NODE, 5); 
    printlist(NODE); 
} 

답변

2

그것의 : 실제로

struct list * insert(struct list* node ,int data) 
    { 
     struct list * new_elem = malloc(sizeof(*new_elem)); //check !=NULL 
     new_elem->data = data; 
     new_elem->next = NULL; 
     if (node != NULL) 
      node->next = new_elem; 
    return (new_elem); 
} 
+0

첫 번째 오류는 main()에 두 번째'node = data; // 호환되지 않는 타입'을 삽입() 함수에 추가합니다 (이 2 포인트도 추가). 그러므로 내 대답이 완전하지 않으므로 삭제됩니다. –

1

를, 많은을 포함 실수.

삽입()을 다시

:

struct list* insert(struct list* node ,int data) //need the type of return value 
{ 
    struct list* newnode; 
    newnode=malloc(sizeof(struct list)); //get rid of '*' 
    //how to insert to a link list? I suggest you make it understand. 
    //in this code, I insert an element in the head. 
    newnode->data = data; 
    //if (node==NULL) 
    // newnode->next = NULL; 
    //else 
    // newnode->next=node; 
    //the code above equals: 
    newnode->next = node; 
    return newnode; 
} 

및 대하여 printList(), 당신은 몇 가지 코드가 아닌 공간을 블록 할 수 없습니다에

";" 즉) (말 같은 실수는 기존의 삽입에 존재

while(node!=NULL) 
    printf("the list contains %d\n",node->data); 
    node=node->next; 

while(node!=NULL) { 
    printf("the list contains %d\n",node->data); 
    node=node->next; 
} 

변경할 수 있습니다.

althoght는 printlist()의 반환 값 유형이 없으면 컴파일 할 수 있지만 void과 같은 값을 추가하는 것이 좋습니다.

if (node==NULL) 
printf("Empty list\n"); 

이 새로운 인서트

if (node==NULL) { 
    printf("Empty list\n"); 
    return; 

}

(

에)) (주이 될 것입니다 :

이 외에도, 널리스트, 당신은 변경해야합니다 :

main() 
{ 
    struct list* NODE = NULL; 
    NODE = insert(NODE,3); 
    NODE = insert(NODE,5); 
    printlist(NODE); 
} 

나는 문제가 해결되면 작동합니다.

+1

네, 지금 일하고 있습니다 :) thnks !! – user2456752

+1

@ user2456752 음, 또 다른 버그가 있습니다. 나는 아래에서 편집 한 또 다른 버그가 있습니다. "또한 null 목록의 경우 변경이 필요합니다 ..." – vvy

+0

@ user2456752 및'malloc()'에 대해 '#include ' – vvy