unit 74쪽을 공부하고 list의 끝쪽에 노드를 삽입하는 함수를 만들어 보았습니다. 그런데 오류가 무엇인지 결과가 출력되지 않습니다.... 무엇이 오류인지 너무너무 궁금합니다ㅠㅠㅠ
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int val;
struct node *next;
}node_t;
node_t *head;
void insert(node_t *head, int X)
{
node_t *newnode;
newnode = (node_t*)malloc(sizeof(node_t));
if(head != NULL)
{
head = newnode;
head->next = NULL;
}
else
{
node_t *location;
location = head;
while(location->next != NULL)
location = location->next;
newnode->val = X;
newnode->next = NULL;
location->next = newnode;
}
}
void printlist(node_t *head)
{
while(head != NULL)
{
head = head->next;
printf("%d\n",head->val);
}
}
void main()
{
insert(head,10);
insert(head,20);
insert(head,30);
printlist(head);
}
심사문제와 관련해서만 답변을 드립니다.
리스트의 끝에 노드를 삽입한다면 변수명을 직관적으로 바꿔주세요.
insert 함수의 내부에는 전부 head 변수가 사용되고 있어서 head에 추가하는 것으로 이해됩니다.(동작과 코드의 이름이 서로 반대?)
head가 아닌 tail이 더 좋은 이름일 겁니다.
원하는 노드의 동작을 그림으로 그리세요. Unit 74의 다양한 그림을 참고해서 자신만의 그림을 그리세요.
자료 구조를 그림으로 그리고, 원하는 함수의 동작을 그림으로 그려서 온전하게 이해한 다음에 코드를 작성하면 대부분 금방 됩니다. 이 과정을 생략하고 코드부터 작성하면 대부분 미궁에 빠집니다. 자신이 원하는 것과 자신이 이해하는 것이 일치하지 않기 때문입니다.
head는 시작점을 관리하니 tail을 선언해 끝점을 관리해야 합니다.
insert_before() 함수는 head를 이용해 삽입하면 시작점 바로 뒤에 삽입하게 되고, tail을 이용해 삽입하면 끝점 바로 앞에 삽입하게 됩니다.
head = 항상 시작점
tail = 항상 끝점
이렇게 만들면 쉽습니다.
인터넷 검색하면 구현 코드는 많이 있고, 대다수 코드는 비슷합니다.
서점에서 자료 구조 책을 찾아 보셔도 됩니다.